[英]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.