MySQL用数组信息选择一些东西

时间:2011-07-27 08:32:27

标签: 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    row4    70

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

3 个答案:

答案 0 :(得分:2)

您可以像这样使用FIND_IN_SET函数:

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

如果您在SET类型上调用它,也会优化使用位运算。

答案 1 :(得分:1)

理想情况下,您可以将“x”列标准化为单独的表格。

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

SELECT * FROM tablename WHERE x LIKE '%,1' OR x LIKE '1,%' OR x LIKE '%,1,%'

这基本上只处理三种不同的情况,其中“1”是列表中的第一个,最后一个或中间元素。 (请注意,如果你的逗号后面有空格,你可以将最后一部分更改为'%,1,%'

编辑:实际上Dmitriy的REGEXP更好,而且'FIN的FIND_IN_SET看起来很理想。

答案 2 :(得分:1)

你可以试试这个:

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