2012-08-05 49 views
1

这里是我的表MySQL的最好的方式得到结果

注意 此表仅用于举例

帖子

++++++++++++++++++++++++++++++++++++++++ 
+ id |title | desc | uid |status | 
++++++++++++++++++++++++++++++++++++++++ 
+ 1 | a | aaaa | 1 | 1 | 
++++++++++++++++++++++++++++++++++++++++ 
+ 2 | b | bbbb | 1 | 1 | 
++++++++++++++++++++++++++++++++++++++++ 
+ 3 | c | cccc | 2 | 1 | 
++++++++++++++++++++++++++++++++++++++++ 

+++++++++++++++++++++++++++++++++ 
+ id | name |parent | status | 
+++++++++++++++++++++++++++++++++ 
+ 1 | cat1 | 0 | 1 | 
+++++++++++++++++++++++++++++++++ 
+ 2 | cat2 | 0 | 1 | 
+++++++++++++++++++++++++++++++++ 

标签

+++++++++++++++++++++++++ 
+ id | name | title | 
+++++++++++++++++++++++++ 
+ 1 | tag1 |ttitle | 
+++++++++++++++++++++++++ 
+ 2 | tag2 |title2 | 
+++++++++++++++++++++++++ 

Linked_data

链接为一个2多关系船

链接名称 帖子ID cat_or_tag_id

+++++++++++++++++++++++++++++ 
+ name | r1   | r2| 
+++++++++++++++++++++++++++++ 
+ cat  | 1   | 1 | 
+++++++++++++++++++++++++++++ 
+ cat  | 1   | 2 | 
+++++++++++++++++++++++++++++ 
+ tag  | 1   | 2 | 
+++++++++++++++++++++++++++++ 

我想用它的猫和标签

什么是做到这一点

我所知道的唯一途径的最好办法,现在 是获得职位则的foreach后得到了猫和标签

+0

这是明确的表结构?我强烈建议改变...... – Chris 2012-08-05 11:12:41

+0

和'linked_data',什么是r1和什么是r2?你能详细解释一下吗? – Chris 2012-08-05 11:14:56

+0

是的,我的表结构像这样的结构,为什么你推荐这样做,以及什么是最好的方式来使用多猫和标签的帖子 – 2012-08-05 11:15:31

回答

5
SELECT Posts.*, GROUP_CONCAT(Cats.name) AS Cats, GROUP_CONCAT(Tags.name) AS Tags 
FROM Posts 
    LEFT JOIN Linked_data ON Linked_data.r1 = Posts.id 
    LEFT JOIN Cats  ON Linked_data.r2 = Cats.id AND Linked_data.name = 'cat' 
    LEFT JOIN Tags  ON Linked_data.r2 = Tags.id AND Linked_data.name = 'tag' 
GROUP BY Posts.id 
帖子

请参阅sqlfiddle

+1

@Mona Abdelmajeed:这是正确的查询! :) – Chris 2012-08-05 11:17:24

+0

谢谢你的帮助@eggyal :) – 2012-08-05 12:22:05

0

我希望这有助于

select p.title, c.name , t.name from posts p 
inner join (select group_concat(c1.name), c1.id from cats c1 group by c1.id) c on p.id = c.id 
inner join (select group_concat(t1.name), t1.id from tags t1 group by t1.id) t on p.id = t.id 
+0

谢谢你的帮助:) – 2012-08-05 12:21:45