2014-10-06 77 views
0

我正在开发PHP脚本与MySQL。我将类型数据存储为“1,2,3”(ID)SQL查询无法正常工作(数字)

然后我遇到了搜索数据的问题。

我的数据表:

METAS表

------------------- 
meta_id,meta_genres 
-------------------- 
|1  |1,2,3  | 

|2  |10,3,4  | 

|3  |12,3,5  | 

------------------- 

我的查询是

SELECT * FROM metas WHERE meta_genres LIKE '%1%' 

然后返回IDS:1,2,3

我想它返回只是1.

我该如何解决它?

最好的问候。

+2

尝试'LIKE' %1,%'' – Gowri 2014-10-06 09:33:03

+3

@Gowri:不会......如果1是最后一个,就会失败......就像4,3,1! – NoobEditor 2014-10-06 09:33:35

+0

你的问题不是那么确切,所以我会假设你想得到符合你需要的meta_genre的ID(告诉我是否猜错)。所以你应该改变'SELECT meta_id FROM metas WHERE meta_genre LIKE'%1'';' – 2014-10-06 09:33:38

回答

1

您还可以使用REGEXP只查找组输入分离1

SELECT * FROM metas WHERE meta_genres REGEXP '[[:<:]]1[[:>:]]' 
+0

谢谢@Girish REGEXP的作品! – 2014-10-06 09:42:34

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, ' ', '')); 
+0

亲爱的Rimas,你的回答似乎很好。然而它什么也没有返回我的查询是真实的,但我不明白 – 2014-10-06 09:42:05

-1

你将永远只会回顾1,那是因为1之后的数字是2,3字符串的一部分。因此,查询不看这些数字作为单独的电话号码,但只是整个字符串.....

+1

我正在尝试,但我需要50点声望点才能添加评论......... – 2014-10-06 09:38:20