gpt4 book ai didi

mysql - 查找带有 tag1 和 tag2 的帖子? (使用连接表)存在/具有/子查询...使用什么?

转载 作者:行者123 更新时间:2023-11-29 21:12:30 26 4
gpt4 key购买 nike

我需要进行查询来搜索和过滤多个术语。

我有一张装有武器的 table ,所有武器都可以有多个标签。 我希望能够为用户创建一个过滤选项,仅显示带有例如武器的武器。 “标签1”和“标签2”。

到目前为止:
到目前为止,我一直使用 GROUP_CONCATHAVING 来过滤它们,但这存在性能问题!因为我被迫执行 GROUP BY w.id 但我想做 ORDER BY 一些其他的事情。而且 GROUP BY 与 ORDER BY 不能很好地配合....

我尝试使用 EXISTS (SELECT ...) 创建一些东西,以便能够过滤多个值,但是当中间有一个“连接表”时,我不确定是否要执行此操作...(所以还剩下 2 个值)加入)

weapons:
id | name
----------
1 | sword
2 | shield

weapon_tag_links:
tag_id | weapon_id
-------------------
62 | 1
80 | 1
80 | 2
60 | 2

weapon_tags:
tag_id | tag
--------------
60 | red
62 | blue
80 | old

搜索查询:

SELECT DISTINCT * FROM weapons as w
LEFT JOIN weapon_tag_links AS l ON l.weapon_id = w.id
INNER JOIN weapon_tags AS t ON l.tag_id = t.tag_id
WHERE EXISTS (
****** Something to go here *******
WHERE t.tag = ‘blue’
) AND EXISTS (
****** Something to go here *******
WHERE t.tag = ‘old’
)

我只是缺少 EXISTS 中您需要的链接。但我不知道如何添加这个......

问题:
假设我想搜索蓝色武器中的记录(本例中是一把剑)我该怎么做?

我并不是说我必须使用“EXISTS”,但我想要以最佳优化的方式来搜索带有通过 AND 连接的某些标签的帖子!

最佳答案

试试这个:

SELECT * FROM wp_posts AS p
LEFT JOIN wp_term_relationships AS tr ON p.ID = tr.object_id
LEFT JOIN wp_terms AS t ON tr.term_taxonomy_id = t.term_id
WHERE p.id IN
(
SELECT p2.id FROM wp_posts AS p2
LEFT JOIN wp_term_relationships AS tr2 ON p2.ID = tr2.object_id
LEFT JOIN wp_terms AS t2 ON tr2.term_taxonomy_id = t2.term_id
GROUP BY p2.id
HAVING FIND_IN_SET('blue', GROUP_CONCAT(t2.term)) AND FIND_IN_SET('old', GROUP_CONCAT(t2.term))
)

关于mysql - 查找带有 tag1 和 tag2 的帖子? (使用连接表)存在/具有/子查询...使用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36246152/

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