【发布时间】:2014-11-09 21:33:24
【问题描述】:
目前我正在使用下面的查询以及递归函数来打印菜单。
"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);
}
【问题讨论】:
-
find_in_set应该可以工作。parentid列中的逗号后面是空格吗?这会阻止它工作。 -
该列中没有空格。传递的值如下:“1,2,3,4”
-
问题不在于您的 SQL,而在于 PHP。
if ($category['parentId'] == $parent)进行完全匹配,如果$category['parentId']有逗号则不起作用。 -
我尝试在那里创建
foreach和explode(',', $str_from_DB)。不过,我可能做错了什么。