我需要选择链接到特定标签的所有文章,但我还希望所有其他标签与每篇文章相关联。由于我的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'wall'标签所属的主题),但我还有另一个查询。如果我可以使用相同的查询获得类似的标签会更好,但我不知道如何。表tag
与topic
表具有多对一关系。
答案 0 :(得分:0)
非确定性GROUP BY: SQL检索既不在聚合函数中也不在GROUP BY表达式中的列,因此这些值在结果中将是不确定的。
不同表格上的GROUP BY: 这将强制使用临时表和filesort,这可能是一个巨大的性能问题,并且可能会占用磁盘上的大量内存和临时空间。