我有一个有两列(id, numberslist)的表。
我怎么能得到所有的行正好"1"在numberslist(在这种情况下id = 2)
sql语句是什么?
id | numberslist
1 | 11,111
2 | 1,2,3
这个行不通:
$sql = "SELECT * FROM mytabelle WHERE numberslist LIKE '%1%'";
我知道以这种方式列出所有数字是一个糟糕的数据库设计,但它是不可更改的
MySQL在正则表达式语法中支持"word boundary"模式。
WHERE numberlist REGEXP '[[:<:]]1[[:>:]]'
您也可以使用FIND_IN_SET():
WHERE FIND_IN_SET('1', numberlist) > 0
也就是说,我同意其他回答中的评论,即在这样的字符串中存储逗号分隔的列表不是好的数据库设计。在数据库列中存储逗号分隔的列表真的那么糟糕吗?
这个设计真的很糟糕。无论如何,对于这个糟糕的设计,这个糟糕的代码应该完成工作:D
SELECT * FROM mytabelle WHERE numberslist = '1' OR
numberslist LIKE '%,1' OR
numberslist LIKE '%,1,%' OR
numberslist LIKE '1,%';
对于这种情况,您可以这样做:
WHERE numberslist = '1' OR numberslist LIKE '1,%' OR numberslist LIKE '%,1,%' OR numberslist LIKE %,1'";
假设数字和逗号之间没有空格。
但是这很难看,更不用说将无法使用任何类型的索引。
您应该阅读有关表规范化的内容。