3

我需要选择链接到特定标签的所有文章,但我还希望与每篇文章关联的所有其他标签。凭借我有限的 SQL 知识,我进行了以下 MySQL 查询,该查询有效,但似乎效率不高。

SELECT a.id, a.name, c.id AS topic_id, c.name AS topic, GROUP_CONCAT(t.id) AS tag_ids, GROUP_CONCAT(t.name) AS tags, a.description
FROM tag t 
LEFT JOIN artifacts_tags j ON t.id = j.tag_id
LEFT JOIN artifact a ON a.id = j.artifact_id
LEFT JOIN topic c ON c.id = a.topic_id

LEFT JOIN artifacts_tags aj ON a.id = aj.artifact_id
LEFT JOIN tag ts ON ts.id = aj.tag_id
WHERE ts.slug = 'summer'
AND a.is_public = 1 
GROUP BY a.id

如果有人可以提出更有效的查询,我将不胜感激。

实际上,我还需要类似的标签(所有标签都属于带有 slug 'summer' 的标签所属的主题),但我有另一个查询。如果我可以使用相同的查询获得类似的标签会更好,但我不知道如何。该表tag与表具有多对一关系topic

4

1 回答 1

0

非确定性 GROUP BY: SQL 检索既不在聚合函数中也不在 GROUP BY 表达式中的列,因此这些值在结果中将是不确定的。

对不同表进行 GROUP BY: 这将强制使用临时表和文件排序,这可能是一个巨大的性能问题,并且会消耗大量内存和磁盘上的临时空间。

于 2012-10-22T12:05:02.930 回答