2016-10-01 31 views
0

我尝试获取包含特定标记的帖子。mySQL - FIND_IN_SET()找不到值

标签行内容

,iphone|1468338028,,android|1468338028,,blackberry|1468338028, 

查询

SELECT * FROM shares WHERE FIND_IN_SET(tag, 'iphone') > 0 ORDER BY DATE DESC limit 10 

什么是做了正确的方法是什么?

+0

实际的问题是你的餐桌设计。你可以改变它吗? –

+0

不幸的是,没有。你能解释更多吗? –

+0

你的标签是'iphone | 1468338028',你会找'iphone'。这不符合 –

回答

1

您的标签为iphone|1468338028,您在寻找iphone。那不匹配。
,替换|以区分这些值。

SELECT * FROM shares 
WHERE FIND_IN_SET(replace(tag, '|', ','), 'iphone') > 0 
+0

谢谢,那就是我在想什么。一个问题,如果有一个空的空间,它会产生问题吗? –

+0

我会说是的,这是一个问题。尽量避免这种情况。 –

+0

我不能在查询中使用trim()吗? –

1

另一种方法是使用LIKE "%text%",如果你不使用FIND_IN_SET()要求。

SELECT * FROM shares 
WHERE tag LIKE "%iphone%" 
ORDER BY DATE DESC limit 10 

上面的代码应该达到相同的,从而避免了更换和修整的问题。