我有一個'articles'表,並且我有一個'tags'表。這兩者之間有一個N:N的關係,所以我也有一個'articles_tags_relations'表。我想檢索帶有標籤的文章列表,但除了標籤的名稱之外,我也需要它的標識。因此,返回的數據應該是這樣的(當然不是JSON格式):如何檢索具有1:N關係的列表
[[1,"FirstArticle",{"1":"FirstTag","2":"SecondTag"}],[2,"SecondArticle",{"3":"ThirdTag"}]]
到目前爲止,我有這樣的:
SELECT article.*, GROUP_CONCAT(tag.name SEPARATOR ', ') AS tags FROM articles AS article LEFT JOIN articles_tags_relations AS relation ON article.id = relation.article_id LEFT JOIN tags AS tag ON relation.tag_id = tag.id LIMIT 0,10;
但它只有沒有IDS的標記名稱。在桌上會有很多閱讀查詢,所以表現很重要。我不確定使用GROUP_CONCAT是要走的路,我願意接受任何想法。謝謝!
不,不是重要的做在一個查詢。所以你說我應該做下面的事情? SELECT article。* FROM articles; SELECT標籤* FROM articles_tags_relations AS關係LEFT JOIN標籤AS標籤ON relation.tag_id = tag.id WHERE relation.article_id IN(1,2,3,4,5,...); – 2011-05-29 20:38:45
通常,我會做Marcel提出的建議(除了外部連接)。在你的情況下,我明白不這樣做,因爲你不想多次發送文章文本由於性能/帶寬。所以是的,我會對你描述的兩個問題。幾乎。您仍然需要第二個查詢中的article_id,以便您知道哪個標籤隨文章而發生變化。目標是將文章文本從加入的查詢中移出。 – 2011-05-29 20:51:00