Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 选择逗号分隔字符串中的值_Php_Mysql_Sql - Fatal编程技术网

Php 选择逗号分隔字符串中的值

Php 选择逗号分隔字符串中的值,php,mysql,sql,Php,Mysql,Sql,这是我思考了几个小时仍然无法得到答案的事情 所以,我有一个mysql表叫做“orders” +-----------------------------+ + id | include + +-----------------------------+ + 1 | 4,7,9 + + 2 | 1,23,8 + + 3 | 11,6,3 +

这是我思考了几个小时仍然无法得到答案的事情

所以,我有一个mysql表叫做“orders”

+-----------------------------+
+ id | include                +
+-----------------------------+
+  1 | 4,7,9                  +
+  2 | 1,23,8                 +
+  3 | 11,6,3                 +                 
+  4 | 2,56,32,6              +
+-----------------------------+
当包含列中有一个数字时,我想选择一行

例如,我尝试了以下方法:

SELECT *  FROM `orders` WHERE `include` LIKE '%1%'
但问题是它同时选择了第2行和第3行,因为数字“11”包含“1”

我需要两个查询:当include表包含“x”时,以及当include表不包含“x”时

有人知道怎么做吗?

使用

但一般来说,最好是更改表结构并在列中只存储一个值。这是数据库规范化的第三条规则。

使用


但一般来说,最好是更改表结构并在列中只存储一个值。这是数据库规范化的第三条规则。

+1数据库规范化的第三条规则。OP可能需要阅读“一对多”和“多对多”关系。+1 DB规范化的第三条规则。OP可能需要阅读“一对多”和“多对多”关系。您可以将include扩展为“%”,1,%%。您应该有两个表:一个父表和一个带有联接的子表,然后从子表中进行选择。您现在使用的方法是,
include
使用逗号分隔的值,这只会让您感到悲伤和心痛。可能的重复可以将include扩展为“%”,1,%”您应该有两个表:一个父表和一个带有联接的子表,然后从子表中进行选择。你现在的方式,用逗号分隔的值表示
include
,只会给你带来悲伤和心痛
SELECT *  FROM `orders` 
WHERE find_in_set(1, `include`) > 0