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,%”