存储在数据库中的数据如下,其中category是列名,逗号分隔的字符串是值。
category = 'cat,cat1,cat2,cat3,cat33,cat4';
我正在尝试使用列表中的类别进行搜索:
$query= mysqli_query($mysqli, "SELECT * FROM table where INSTR(category,'cat3') > 1 ");
但这不起作用,因为结果包括cat3和cat33。有什么想法我可以做这个搜索,请?谢谢!
r6vfmomb1#
您可以使用“在集合中查找”功能:
SELECT * FROM table where FIND_IN_SET('cat3', category) > 0
但您应该通过创建类别表并与表的主键相关来规范化数据
13z8s7eq2#
"SELECT * FROM table where category LIKE '%cat3,%'"; "SELECT * FROM table where category LIKE '%cat33,%'";
如果不想在每个类别名称的末尾添加逗号,则 "SELECT * FROM table where category LIKE '%cat3,%' OR category LIKE '%cat3'";
"SELECT * FROM table where category LIKE '%cat3,%' OR category LIKE '%cat3'";
anhgbhbe3#
您可以使用下面的查询来“解决”这个问题。但我几乎不建议你规范化你的数据库,只在你真正需要的时候才使用它
SELECT * FROM table WHERE fild LIKE '%,camp3,%' OR fild LIKE 'camp3' OR field LIKE '%,camp3'
3条答案
按热度按时间r6vfmomb1#
您可以使用“在集合中查找”功能:
但您应该通过创建类别表并与表的主键相关来规范化数据
13z8s7eq2#
如果不想在每个类别名称的末尾添加逗号,则
"SELECT * FROM table where category LIKE '%cat3,%' OR category LIKE '%cat3'";
anhgbhbe3#
您可以使用下面的查询来“解决”这个问题。但我几乎不建议你规范化你的数据库,只在你真正需要的时候才使用它