1

これが私のテーブルです

この表は一例にすぎません

投稿

++++++++++++++++++++++++++++++++++++++++
+   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

1つの2マルチリレーションシップとしてリンク

リンク名postidcat_or_tag_id

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

猫とタグで投稿したい

これを行うための最良の方法は何ですか

私が今知っている唯一の方法 は、投稿を取得してから、foreach投稿が猫とタグを取得することです

4

2 に答える 2

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でそれを参照してください。

于 2012-08-05T11:15:49.660 に答える
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
于 2012-08-05T11:16:29.373 に答える