gpt4 book ai didi

mysql - 使用 join 语句和标签映射时搜索两个或多个标签

转载 作者:行者123 更新时间:2023-11-30 22:58:36 25 4
gpt4 key购买 nike

我的标签系统有问题。我有一个名为 ads 的表,一个名为 tags 的表和另一个名为 tags_map 的表,它将标签链接到广告列表。问题是当我使用多个标签搜索广告时。

搜索参数:php、lorem 和 jobs

附加到广告的标签:jobs, php, html

SQL 查询:

SELECT *, a.title AS ad_title, a.id AS ad_id
FROM ads AS a
LEFT JOIN tags_map AS tm ON tm.ad_id = a.id
LEFT JOIN tags AS t ON tm.tag_id = t.id
WHERE a.status='live'
AND (a.description LIKE '%php%' OR a.title LIKE '%php%' OR t.title LIKE '%php%')
AND (a.description LIKE '%lorem%' OR a.title LIKE '%lorem%' OR t.title LIKE '%lorem%')
AND (a.description LIKE '%jobs%' OR a.title LIKE '%jobs%' OR t.title LIKE '%jobs%')
GROUP BY a.id
ORDER BY bump_time DESC

我认为问题出在连接上,它只能搜索一个标签,谁能帮忙

谢谢,

CP

最佳答案

一个标签不能有满足所有三个条件的描述。但是,广告的标签集 可以包含它们。因此,逻辑需要移动到 having 子句:

SELECT *, a.title AS ad_title, a.id AS ad_id
FROM ads a LEFT JOIN
tags_map tm
ON tm.ad_id = a.id LEFT JOIN
tags t
ON tm.tag_id = t.id
WHERE a.status='live'
GROUP BY a.id
HAVING SUM(a.description LIKE '%php%' OR a.title LIKE '%php%' OR t.title LIKE '%php%') > 0 AND
SUM(a.description LIKE '%lorem%' OR a.title LIKE '%lorem%' OR t.title LIKE '%lorem%') AND
SUM(a.description LIKE '%jobs%' OR a.title LIKE '%jobs%' OR t.title LIKE '%jobs%')
ORDER BY bump_time DESC ;

having 子句中的每个条件检查每个关键字。 > 0 要求广告满足每个关键字条件。一些比较来自广告表而其他比较来自标签表这一事实是可以的。逻辑仍然有效。

由于 group byselect * 没有任何意义。 tagstags_map 中的字段来自任意行——并且可能有多个匹配行。我建议这样做:

select a.*

如果你想要 tgs:

select a.*, group_concat(t.title) as tags

关于mysql - 使用 join 语句和标签映射时搜索两个或多个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099164/

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