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には、テーブルとの多対1の関係がありtopicます。

4

1 に答える 1

0

非決定論的GROUPBY: SQLは、集計関数にもGROUP BY式にも含まれていない列を取得するため、これらの値は結果で非決定論的になります。

異なるテーブル でのGROUPBY:これにより、一時テーブルとファイルソートの使用が強制されます。これは、パフォーマンスの大きな問題になる可能性があり、ディスク上の大量のメモリと一時スペースを消費する可能性があります。

于 2012-10-22T12:05:02.930 に答える