find_in_set()找不到所有值

时间:2013-03-25 08:21:10

标签: php mysql sql hashtag

我的数据库记录为:

hashtag -   description -   tags -  location -  time -  day

#social -  description - social media, facebook, social networking sites, social media, smartphone - usa - Tuesday

#php -  description - programming language, coding, open source - usa - Tuesday

#iphone -  description - smartphone, apple, iphone apps, costly phone, touch screen - usa - Tuesday

这里的标签是逗号分隔值。

现在,如果用户搜索programming - 结果将为2nd row

"coding"  - 2nd row
"smartphone" - 3rd & 1st row.
"iphone" - 3rd row

所以,这就像搜索标签或直接搜索hash关键字一样。第一列是hashkeyword。标签以逗号分隔存储在数据库中。

我正在使用find_in_set(),但它似乎无法正常工作。

SELECT * FROM `hash`WHERE `hashtag` LIKE 'smartphone' OR find_in_set('smartphone', tags)

它只返回第一行,即

iphone -    iphone description - smartphone, apple, apps, touchscreen - India   - tuesday

但“智能手机”值也在第3排,因此它必须返回第1和第3行。

我哪里错了?或者是否有任何不同的搜索方法而不是find_in_set()

2 个答案:

答案 0 :(得分:1)

如果逗号后面有空格,则FIND_IN_SET将无法正常工作。

它会在smartphone, apple, apps, touchscreen中找到,但在apple, smartphone, apps, touchscreen中找不到。

对于替代解决方案,请尝试mysql full text search

答案 1 :(得分:0)

find_in_set()的正确语法是:

SELECT *
FROM `tablename`
WHERE FIND_IN_SET( `column`, 'val1,val2' )

编辑:

您可以使用LIKE进行文字搜索:

SELECT *
FROM `tablename`
WHERE tags LIKE '%TAG%'