就像在MySQL和PHP中以逗号分隔的列表一样

时间:2014-03-10 14:15:38

标签: php mysql

我有一个user_apps表。

enter image description here

其中一个专栏是appid,它是一个可搜索的。 当我存储一个昏迷的分隔列表时,你可以看到我犯了错误的列的图片。

在记录3,4和6中有id为“2”,“2”和“12”,

如果我喜欢'%2%',我会得到所有三条记录 - 这是错误的。

如果我喜欢'%2,%'我会得到2和12,并且错过2 - 再次是错误的。

无论如何我可以在代码级别对其进行排序

2 个答案:

答案 0 :(得分:1)

短期解决方案:find_in_set()

SELECT ... WHERE FIND_IN_SET('2', appid)

长期+真正的解决方案:修复您的数据库设计并将其规范化。这些单独的数字中的每一个都应该在子表中的自己的记录中。

Hackish /甚至更糟的解决方案:

SELECT ... WHERE (appid = 2) OR (appid LIKE '%,2') OR (appid LIKE '2,%') OR (appid LIKE '%,2,%')

它涵盖了您的值在CSV字符串中显示的所有可能方式:本身,字符串的结尾,字符串的开头或中间的某个位置。

答案 1 :(得分:0)

SELECT * FROM [tableName] WHERE FIND_IN_SET('2', appid)>0