【问题标题】:Search column with comma separated string用逗号分隔字符串的搜索列
【发布时间】: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'] 有逗号则不起作用。
  • 我尝试在那里创建foreachexplode(',', $str_from_DB)。不过,我可能做错了什么。

标签: php mysql sql pdo


【解决方案1】:

改变这一行:

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

到:

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

== 测试不会在逗号分隔的字符串中查找元素。

实际上,您根本不需要这个if。 SQL 中的WHERE 子句已经保证$parent$category['parentId'] 中。

【讨论】:

  • 谢谢!我拿走了if ($category['paren...,现在它可以工作了:)
猜你喜欢
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 2021-05-29
  • 2016-04-24
  • 1970-01-01
相关资源
最近更新 更多