我有这样的表:
+-------+-----------+
| name | ids |
+-------+-----------+
| Artur | 1, 2, 3 |
+-------+-----------+
| David | 11, 22, 33|
+-------+-----------+
我有这样的SQL查询:
SELECT * FROM table WHERE ids LIKE '%$id%'
例如$id=1;
我需要检索Artur行。代码可以工作,但在这种情况下($ id = 1),David的行也会被检索,因为他的ids
包含变量$的值标识。
所以我需要像:SELECT * FROM table WHERE "some number of ids"=$id
或者我必须使用LIKE
的aproach和其他一些条件?
提前感谢您的关注
答案 0 :(得分:3)
您可以使用find_in_set()
select * FROM table WHERE find_in_set('1',ids) > 0 ;
请注意,您正在进行糟糕的数据库设计,并且将来可能会遇到很多问题。您永远不应该存储以逗号分隔的数据。所以第一步就是进行标准化。
答案 1 :(得分:2)
答案 2 :(得分:1)
使用mysql FIND_IN_SET。
SELECT * FROM table WHERE FIND_IN_SET($id, ids)
或LIKE
SELECT * FROM table WHERE CONCAT(', ', ids, ', ') LIKE '%, $id ,'
但两者都不推荐。你应该normalize your database。