0

この (My)SQL の問題は、今週末に解決しなければ気が狂いそうです!

シンプルな共有ブログ (多くの著者が貢献していることを意味します)。データベース上の 2 つのテーブルを考えてみましょう。

投稿:

  • ID
  • author_id
  • 題名
  • コンテンツ

コメント:

  • ID
  • author_id
  • post_id
  • コンテンツ

目標: 貢献者 (=> 固定の author_id) のすべてのアクティビティを表示したい。アクティビティとは、次のことを意味します。

  • ユーザーが投稿を作成してコメントした場合: 投稿のタイトルとユーザーのコメントを表示します
  • ユーザーが投稿を作成したがコメントしていない場合: 投稿のタイトルのみを表示する
  • ユーザーが投稿を作成せずにコメントした場合: 投稿のタイトルとユーザーのコメントを表示します

私はこのSQLスクリプトを試しました:

SELECT p.id AS post_id, p.author_id AS post_author_id, c.author_id AS comment_author_id, title, c.content

FROM Posts p JOIN Comments c ON p.id = c.post_id

WHERE p.author_id = $userId

OR c.author_id = $userId

うまく見えますが、ユーザーが投稿を作成した行は表示されませんが、コメントはありません。

何か案が?事前にサンクス。

4

1 に答える 1

0

MySQL で FULL OUTER JOIN をシミュレートするには、コメントに外部結合された投稿の結果を、投稿に外部結合されたコメントの結果と UNION する必要があります。

SELECT p.id AS post_id, 
       p.author_id AS post_author_id, 
       c.author_id AS comment_author_id,
       p.title, 
       c.content
FROM Posts p 
LEFT JOIN Comments c ON p.id = c.post_id AND c.author_id = $userId
WHERE p.author_id = $userId
UNION ALL
SELECT p.id AS post_id, 
       p.author_id AS post_author_id, 
       c.author_id AS comment_author_id,
       p.title, 
       c.content
FROM Posts p 
RIGHT JOIN Comments c ON p.id = c.post_id
WHERE c.author_id = $userId
于 2012-03-02T10:36:06.233 に答える