gpt4 book ai didi

php - 在标签上搜索时如何获得包含所有标签的文章?

转载 作者:行者123 更新时间:2023-11-29 06:05:40 26 4
gpt4 key购买 nike

我有这样的查询:

select ...,
group_concat(tag.string separator '|') as tags
from article a
left join articletag on a.id = articletag.a_id
left join tag on tag.id = articletag.t_id
where /* OR product of (column like %term%) */
group by a.id

问题是,当标签发生匹配时,它会破坏我的“分组”并只返回一行。

当至少有 1 行匹配时,我如何在没有巨大性能损失的情况下获得整个组?


例子:

article
id | title | content
2 | article 2 | long content

tag
id | string
1 | tag 1
2 | tag 2
4 | tag 4

articletag
a_id | t_id
2 | 1
2 | 2
2 | 4

当前查询将返回 (2, 'article 2', 'long content', 'tag 1') 当它包含 tag.string like '%tag 1%'.

(2, 'article 2', 'long content', 'tag 1|tag 2') 搜索 'tag 2'

我想获取(2, 'article 2', 'long content', 'tag 1|tag 2|tag 4')

最佳答案

您当前方法的问题是您按 article 表的 id 列进行分组,但您在选择非聚合记录的同时还使用了 分组依据。这在您的原始查询中有些隐藏,因为您只有省略号 ...,但问题就在那里。

相反,在单独的子查询中计算管道分隔的标记字符串,然后将其连接回 article 表:

SELECT t1.*, t2.tags
FROM article t1
LEFT JOIN
(
SELECT at.a_id,
GROUP_CONCAT(COALESCE(t.string, 'NA') ORDER BY t.string SEPARATOR '|') AS tags
FROM articletag at
LEFT JOIN tag t
ON at.t_id = t.id
GROUP BY at.a_id
) t2
ON t1.id = t2.a_id

此处演示:

SQLFiddle

关于php - 在标签上搜索时如何获得包含所有标签的文章?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41819614/

26 4 0