Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql在数组中搜索字符串_Php_Mysql_Mysqli - Fatal编程技术网

Php Mysql在数组中搜索字符串

Php Mysql在数组中搜索字符串,php,mysql,mysqli,Php,Mysql,Mysqli,存储在数据库中的数据如下所示,其中类别是列名,逗号分隔的字符串是值 category = 'cat,cat1,cat2,cat3,cat33,cat4'; 我正在尝试使用列表中的类别进行搜索: $query= mysqli_query($mysqli, "SELECT * FROM table where INSTR(category,'cat3') > 1 "); 但这不起作用,因为结果包括cat3和cat33 请问我该如何做这个搜索 谢谢 "SELECT * FROM table

存储在数据库中的数据如下所示,其中类别是列名,逗号分隔的字符串是值

category = 'cat,cat1,cat2,cat3,cat33,cat4';
我正在尝试使用列表中的类别进行搜索:

$query= mysqli_query($mysqli, "SELECT * FROM table where
INSTR(category,'cat3') > 1 ");
但这不起作用,因为结果包括cat3和cat33

请问我该如何做这个搜索

谢谢

"SELECT * FROM table where category LIKE '%cat3,%'";
"SELECT * FROM table where category LIKE '%cat33,%'";
如果不想在每个类别名称的末尾添加逗号,则
“从表中选择*,其中类别为“%cat3、%”或类别为“%cat3”

如果不想在每个类别名称的末尾添加逗号,则
“从表中选择*,其中类别为“%cat3、%”或类别为“%cat3”

您可以使用“在集合中查找”功能:

SELECT * FROM table where FIND_IN_SET('cat3', category) > 0
但是您应该通过创建类别表来规范数据,并与表的主键相关

您可以使用FIND\u IN\u SET函数:

SELECT * FROM table where FIND_IN_SET('cat3', category) > 0
但是您应该通过创建类别表来规范化数据,并与表的主键相关

您可以使用下面的查询“解决”这个问题。但我几乎不建议您规范化您的数据库,并仅在您真正需要时使用它

SELECT * FROM table WHERE fild LIKE '%,camp3,%' OR fild LIKE 'camp3' OR field LIKE '%,camp3'
您可以使用下面的查询“解决”此问题。但我几乎不建议您规范化您的数据库,并仅在您真正需要时使用它

SELECT * FROM table WHERE fild LIKE '%,camp3,%' OR fild LIKE 'camp3' OR field LIKE '%,camp3'

“存储在数据库中的数据如下所示,其中类别是列名,逗号分隔的字符串是值”-这肯定表明您遇到了数据建模问题。不应该将多个值塞进数据库中的单个字段中。有人可能建议使用FIND_in_SET,但最好的答案是规范化。如果您还没有使用select,我想这意味着它不是活动的,否则它不会做任何事情。老实说,扩展上面的注释,您应该在不可用的情况下花点时间添加一个名为(eg)
categories
的新表,并将每个类别作为一个单独的行,其中包含与每个cat相关的其他列中的数据“存储在数据库中的数据如下,其中category是列名,逗号分隔的字符串是值”-这是一个明确的迹象,表明您存在数据建模问题。不应该将多个值塞进数据库中的单个字段中。有人可能建议使用FIND_in_SET,但最好的答案是规范化。如果您还没有使用select,我想这意味着它不是活动的,否则它不会做任何事情。老实说,扩展上面的注释,您应该在不可用的情况下花点时间添加一个名为(eg)
categories
的新表,并将每个类别作为一个单独的行,其中的数据位于与每个catt相关的其他列中。这将丢失列表中的最后一个值;这也将匹配一个名为“somecat3”的类别。如果您打算以错误的方式执行此操作,并且不规范化表,则可以使用正则表达式:
SELECT*FROM table where category REGEXP'(^ |,)cat3(,|$)”
。这将丢失列表中的最后一个值。“SELECT*FROM table where category LIKE'%cat3,%”或category LIKE'%cat3';这也将匹配一个名为“somecat3”的类别。如果您打算以错误的方式执行此操作并且不规范化表,则可以使用正则表达式:
SELECT*FROM table where category REGEXP'(^ |,)cat3(,|$)'