gpt4 book ai didi

mysql - 使用 LIKE 运算符而不限制结果

转载 作者:行者123 更新时间:2023-11-29 08:18:31 25 4
gpt4 key购买 nike

我有以下查询,其目的是显示包含一系列“标签”的“项目”列表。此外,我选择为每个“项目”仅显示“5”个标签,如下所示:

$query = mysql_query("SELECT i.*, 
SUBSTRING_INDEX(GROUP_CONCAT(t.name), ',', 5) 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");

好的,太好了。它给了我这样的东西:

[项目 1] 标签1、标签2、标签3、标签6、标签8

[项目 2] 标签1、标签3、标签11、标签15、标签16

[项目 3] 标签2、标签4、标签5、标签6、标签7

等等

但事情是这样的:如果想显示用“tag2”“标记”的“项目”列表,请添加:

WHERE (t.name LIKE 'tag2')

我的结果很简单:

[项目 1] 标签2

[项目 3] 标签2

向我显示实际上标有“tag2”的项目,但将“标签”限制为该标签。结果,我真正想要的是这两个项目(标记为“tag2”的项目)及其所有标签:

[项目 1] 标签1、标签2、标签3、标签6、标签8

[项目 3] 标签2、标签4、标签5、标签6、标签7

我尝试过使用

WHERE (tagList LIKE '%tag2%')

但这只是给了我:

Invalid query: Unknown column 'tagList' in 'where clause'

我希望我已经说清楚了。非常感谢!

最佳答案

您可以使用HAVING而不是WHERE来做到这一点

SELECT i.*, 
SUBSTRING_INDEX(GROUP_CONCAT(t.name), ',', 5) 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 (tagList LIKE '%tag2%')

如果您想搜索所有标签(不仅仅是前 5 个),您可以通过再次加入标签来实现:

SELECT i.*, 
SUBSTRING_INDEX(GROUP_CONCAT(t.name), ',', 5) tagList
FROM items AS i
JOIN tag_rel as tr2 ON (tr2.item = i.id)
JOIN tags as t2 ON (t2.id = tr2.tag)
LEFT JOIN tag_rel AS tr ON (tr.item = i.id)
LEFT JOIN tags AS t ON (t.id = tr.tag)
WHERE t2.name = 'tag2'
GROUP BY i.id

或与另一个GROUP_CONCAT:

SELECT i.*, 
SUBSTRING_INDEX(GROUP_CONCAT(t.name), ',', 5) 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 '%tag2%')

您还应该知道,LIKE 解决方案还将匹配“tag2”、“tag21”、“myTag2”...等。

关于mysql - 使用 LIKE 运算符而不限制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20054504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com