簡體   English   中英

搜索列,以逗號分隔

[英]Search column with comma separated string

目前,我正在使用下面的查詢以及遞歸函數來打印菜單。

"SELECT * FROM categories WHERE FIND_IN_SET('".$parent."', parentId)"

數據庫結構: 在此處輸入圖片說明

打印出來的結果是:

Smycken
--| Halsband
--|--| Guld
--|--|--| test
--|--|--|--| test2
--|--| Silver
--| Armband
Honung

第10行, parentId 我用逗號分隔了兩個值(我讀過這不是存儲值的最終方法,但是無論如何我都會這樣做), 現在我希望第10行像子類別一樣打印出來,就像我的其他子類別一樣行被打印出來。 我發現的解決方案是使用FIND_IN_SET或使用LIKE,但我都不希望它們都起作用。

對我的問題的建議或解決方案?

這是我的功能:

function getSubCat($level = 0, $parent = 0)
{                                               


$hasChildren = false;
$outputHtml = '%s';
$childrenHtml = '';

$dbh = getdbh();

$getSubCategory = $dbh->prepare("SELECT * FROM categories WHERE FIND_IN_SET('".$parent."', parentId)");
$getSubCategory->execute();
$categories = $getSubCategory->fetchAll();
foreach($categories as $category)
{

    if ($category['parentId'] == $parent) {
        $hasChildren = true;
        $childrenHtml .= '<option value="'.$category['id'].'">';

        for($k = 0 ; $k < $level; $k++) {
            $childrenHtml .= '--|';
        }

        $childrenHtml .= ' '.$category['name'];
        $level++;
        $childrenHtml .= '</option>';
        $childrenHtml .= getSubCat($level, $category['id']);         
        $level--;                                                       
    }
}

if (!$hasChildren) {
    $outputHtml = '';
}

    return sprintf($outputHtml, $childrenHtml);
}

更改此行:

if ($category['parentId'] == $parent) {

至:

if (in_array($parent, explode(',', $category['parentId']))) {

==測試不會在逗號分隔的字符串中查找元素。

其實,你並不需要這個if在所有。 SQL中的WHERE子句已經保證$parent$category['parentId']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM