我有一个项目列表,每个项目都包含一个与标记列表相关的。
我可以通过筛选标记来检索这些项:

HAVING (GROUP_CONCAT(tag.name) LIKE '%$tag%')

所以“物品x”的标签名可以是:鞋子,凉鞋,鞋跟,黑色,漂亮
而我正在寻找的$标签是:“鞋”-这将给我“项目x”。
但是当用户搜索超过一个单词的标签时会发生什么呢?即“漂亮的黑色鞋子”。上面的情况不会带来结果。
我知道我可以把每个词都分解成独立的词,但是我该怎么做呢?:
HAVING (GROUP_CONCAT(tag.name) LIKE '%$tag1%' OR GROUP_CONCAT(tag.name) LIKE '%$tag2%' OR GROUP_CONCAT(tag.name) LIKE '%$tag3%')

其中$tag1=漂亮,$tag2=黑色,$tag2=鞋子
在我看来,定义组CONCAT x times(示例中为3)可能有点费劲?
有什么想法吗?
请注意我用的是“HAVING”而不是“WHERE”。
谢谢!
更新:过帐完整查询:
$query = mysql_query("SELECT i.id
                , SUBSTRING_INDEX(GROUP_CONCAT(t.name ORDER BY t.stats_items DESC), ',', 3) as tagList
                FROM items AS i
                LEFT JOIN tag_rel AS tr ON (tr.item = i.id)
                LEFT JOIN tags AS t ON (t.id = tr.tag)
                GROUP BY i.id
                HAVING (GROUP_CONCAT(t.name) LIKE '$tag%')
                ORDER by i.DESC LIMIT 0, 120");

最佳答案

更干净的方法不是在字符串中搜索

HAVING sum(tag.name = 'nice') > 0
AND sum(tag.name = 'black') > 0
AND sum(tag.name = 'shoes') > 0


WHERE tag.name in ('nice','black','shoes')
HAVING count(distinct tag.name) = 3

关于mysql - mysql HAVING组有多个LIKE条件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20349673/

10-11 17:11