搜索多个类别(FIND_IN_SET)



我在Codeigniter中有一个项目,用户可以在其中搜索多个类别。在我的数据库中,类别字段是逗号分隔的字符串(46,53,76(。

当用户在过滤器(46(中选择类别并与数据库中的第一个类别匹配时,它可以正常工作,但如果用户选择另一个类别(53(,查询就不能正常工作。当用户选择多个类别时,也会出现类似的问题。

我的代码类似于:

if(!empty($category)) {
$cat_array = explode(',', $category);
$count_items = count($cat_array);



if($count_items == '1') {
$this->db->where("find_in_set($category, po_category)");
} else {







$this->db->group_start();
$count = 0;
foreach($cat_array as $item) {
$count++;

if($count == '1') {
$this->db->where("find_in_set($item, po_category)");
} else {
$this->db->or_where("find_in_set($item, po_category)");
}
}
$this->db->group_end();
}
}

我想知道"find_in_set"在这种结构中是否有效。

在我的数据库中,类别字段是逗号分隔的字符串('46, 53, 76'(。

当用户在过滤器(46(中选择类别并与数据库中的第一个类别匹配时,它可以正常工作,但如果用户选择另一个类别(53(,则查询无法正常工作。

您的值列表中没有53!它包含与要搜索的值不同的值' 53'(带前导空格字符(。所以你们的搜索结果是否定的。

SELECT FIND_IN_SET(  53 , '46, 53, 76'),
FIND_IN_SET( '53', '46, 53, 76'),
FIND_IN_SET(' 53', '46, 53, 76');    

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=81f440fd21b450924f21e769039d1db

PS。尾部空间也被考虑在内。

po_category字段中逗号后有空格。

所以你需要删除它。

你可以试着那样做。

$this->db->where("find_in_set($item, REPLACE(po_category, ' ', ''))");
$this->db->or_where("find_in_set($item, REPLACE(po_category, ' ', ''))");

相关内容

  • 没有找到相关文章

最新更新