2012-03-02 20 views
0

この(私の)SQLの問題は、この週末に解決しなければ狂ってしまいます!SQLを使用して共有ブログのユーザーの投稿とコメントを取得

単純な共有ブログ(多くの著者が貢献していることを意味します)。

投稿

  • タイトル
  • コンテンツ
  • コメントをAUTHOR_ID

    • IDのは、私のデータベース上の2つのテーブルを考えてみましょう
      • 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 
      

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

      Thanxは事前にそのような -

  • +0

    あなたは、JOINの異なる種類を必要とします - 'FULL OUTER JOIN'を試してみてください。とにかく、さまざまな結合の違いをもっと読むhttp://en.wikipedia.org/wiki/Join_(SQL) – scibuff

    +0

    私の週末、scibuffを保存しました!どうもありがとう。私はMySQLを使用しているので、FULL OUTER JOINはサポートされていません。しかし、LEFT OUTER JOINはうまくいきます。私はそれを検証することができるように、あなたのコメントを回答として追加してください。 Thnx。 – htaidirt

    答えて

    0

    は、あなたが投稿、外の結果が投稿に参加し、外側のコメントのものと、コメントに接合されたUNIONする必要があり、MySQLでは完全外部結合をシミュレートするには、次の

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

    あなたの答えをマークしていただきありがとうございます。素晴らしいことですが、FULL JOINをエミュレートする方法の良い例です。私の場合は、投稿がなければコメントが存在できないので、LEFT JOINで十分です。再度、感謝します。 – htaidirt

    +0

    @Hassinus - ただし、あなたが興味を持っているユーザーが*別の著者によって投稿にコメントを投稿している可能性があります。そのため、2番目の選択が必要です。 –

    +0

    あなたはそうです!私のテストでは私の期待通りの行が得られたので間違っていたが、あなたが暴露した状況は考慮しなかった。今私はORDER活動の問題が(最近の投稿やコメントで)、ここに完全な問題があります:http://stackoverflow.com/questions/9532140/how-to-select-the-max-of-two-element- of-each-row-in-mysql – htaidirt

    関連する問題