我正在用MySQL开发php脚本。我将流派数据存储为" 1,2,3和#34;(ID)
然后我遇到搜索数据的问题。
我的数据表是:
metas table
-------------------
meta_id,meta_genres
--------------------
|1 |1,2,3 |
|2 |10,3,4 |
|3 |12,3,5 |
-------------------
我的查询是
SELECT * FROM metas WHERE meta_genres LIKE '%1%'
然后返回ID:1,2,3
我想它只返回1.
我该如何解决?
最诚挚的问候。
答案 0 :(得分:4)
使用FIND_IN_SET(str,strlist) function:
SELECT *
FROM metas
WHERE FIND_IN_SET(1, meta_genres)
编辑:如果meta_genres中的逗号(例如1 , 2 , 3
)之前有空格,则上面的查询可以返回空集。解决方法:
SELECT *
FROM metas
WHERE FIND_IN_SET(1, REPLACE(meta_genres, ' ', ''));
答案 1 :(得分:1)
您还可以使用REGEX在集合输入
中仅查找分隔的1
SELECT * FROM metas WHERE meta_genres REGEXP '[[:<:]]1[[:>:]]'
答案 2 :(得分:-1)
你永远不会只追溯1,那是因为1之后的数字是2,3字符串的一部分。因此查询不会将这些数字看作单个数字,而只是作为整个字符串......