Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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
MySQL使用数组信息选择对象_Mysql_Sql_Select - Fatal编程技术网

MySQL使用数组信息选择对象

MySQL使用数组信息选择对象,mysql,sql,select,Mysql,Sql,Select,有没有办法做到这一点 SELECT * FROM tablename WHERE x CONTAINS "1" 基本上,我想从数据库中选择数据,其中x包含一个特定的数字。问题是,任何行中的x列都可以包含“1,2,3”,我想选择所有包含1的列,特别是1,而不是11或任何包含1的列,特别是1 下面是一个例子: id title x ------------------- 1 row1 1,22,3 2 row2 1,5 3 row3 5,91 4

有没有办法做到这一点

SELECT * FROM tablename WHERE x CONTAINS "1"
基本上,我想从数据库中选择数据,其中x包含一个特定的数字。问题是,任何行中的x列都可以包含“1,2,3”,我想选择所有包含1的列,特别是1,而不是11或任何包含1的列,特别是1

下面是一个例子:

id   title   x
-------------------
1    row1    1,22,3
2    row2    1,5
3    row3    5,91
4    row4    70

我希望查询返回第1行和第2行。我不想要第3行,因为1在数字91内。我不想要第4行,因为那里也没有1。

理想情况下,您应该将“x”列规范化为一个单独的表

但是。。。你也可以这样破解它:

SELECT * FROM tablename WHERE x LIKE '%,1' OR x LIKE '1,%' OR x LIKE '%,1,%'
这基本上只处理三种不同的情况,“1”是列表中的第一个、最后一个或中间元素。(请注意,如果逗号后有空格,请将最后一部分更改为“%”,1,%”

编辑:实际上,Dmitry的REGEXP更好,a'r的FIND_IN_SET看起来更理想。

您可以尝试以下方法:

SELECT * FROM tablename WHERE x REGEXP "(^|,)1(,|$)"

您可以使用FIND_IN_SET函数,如下所示:

SELECT * FROM tablename WHERE FIND_IN_SET('1', x)

如果您在集合类型上调用它,这也将优化为使用位算术。

为什么x列是一个字符串形式的整数列表?将x值分离到另一个表中,然后使用联接。这样做只会伤到自己的脚。这样做更容易:
CONCAT(',',,x',,'),如“%,1,%”