3

私はソーシャルネットワークを作成していますが、かなり特殊なケースがあり、ほぼ正しいクエリがあります。1つのクエリにマージする6つのテーブルがあります。テーブルは、テーブル、、、およびrecentの正確な行を見つけるために使用されます。また、テーブルで一致するものを見つけると複雑になります。ここで、members.usernameは列IDと一致し、egos.egonameは列で一致します。これらはすべて、recent.realtime列のunixタイムスタンプでソートされています。現在のクエリは次のとおりです。brostplainegobrostbrostpublicmembersegosbrostplainbrostpublicegobrostegoid

   SELECT recent.id, 
          recent.brosttype, 
          recent.postid, 
          recent.realtime, 
          members.username,
          egos.egoname, 
          brostplain.id, 
          brostplain.postid, 
          brostplain.content, 
          brostplain.up, 
          brostplain.down, 
          brostplain.timedata, 
          brostplain.realtime, 
          brostplain.attached, 
          brostplain.replies, 
          brostplain.ext, 
          brostplain.onpage, 
          brostplain.touser, 
          brostplain.isego, 
          brostplain.category, 
          egobrost.egoid, 
          egobrost.postid, 
          egobrost.content, 
          egobrost.up, 
          egobrost.down, 
          egobrost.timedata, 
          egobrost.realtime, 
          egobrost.attached, 
          egobrost.replies, 
          egobrost.ext, 
          egobrost.onpage, 
          egobrost.touser, 
          egobrost.isego, 
          egobrost.category, 
          brostpublic.id, 
          brostpublic.postid, 
          brostpublic.content, 
          brostpublic.up, 
          brostpublic.down, 
          brostpublic.timedata, 
          brostpublic.realtime, 
          brostpublic.attached, 
          brostpublic.replies, 
          brostpublic.ext, 
          brostpublic.category, 
          brostpublic.isego 
     FROM recent 
LEFT JOIN brostplain ON recent.brosttype=brostplain.brosttype 
      AND recent.postid=brostplain.postid 
LEFT JOIN brostpublic ON recent.brosttype=brostpublic.brosttype 
      AND recent.postid=brostpublic.postid 
LEFT JOIN egobrost ON recent.brosttype=egobrost.brosttype 
      AND recent.postid=egobrost.postid 
LEFT JOIN egos ON egos.egoid=egobrost.egoid
     JOIN members ON brostplain.id=members.id OR brostpublic.id=members.id 
    WHERE recent.id='2' ORDER BY recent.realtime DESC

これで、関連するすべての行が取得されますが、egosテーブルの結合方法が原因で、egobrost行の結果が返されません。また、結合を配置する場所や実装方法がわかりません。egosのJOINを省略し、SELECTからegos.egonameを削除すると、egobrostテーブルの行は問題なく表示されますが、出力にはegonameが必要です。どんな助けでも大歓迎です。

編集(解決済み):よく考えた後、のJOINにLEFTを追加してこれを解決しましたmembers。これで結果セットが完成しました。貢献してくれた人たちに感謝します。

4

1 に答える 1

0

メンバーの JOIN を LEFT JOIN に変更し、エゴの LEFT JOIN と一致させて解決しました。最後のクエリは次のとおりです。

SELECT recent.id, 
          recent.brosttype, 
          recent.postid, 
          recent.realtime, 
          members.username,
          egos.egoname, 
          brostplain.id, 
          brostplain.postid, 
          brostplain.content, 
          brostplain.up, 
          brostplain.down, 
          brostplain.timedata, 
          brostplain.realtime, 
          brostplain.attached, 
          brostplain.replies, 
          brostplain.ext, 
          brostplain.onpage, 
          brostplain.touser, 
          brostplain.isego, 
          brostplain.category, 
          egobrost.egoid, 
          egobrost.postid, 
          egobrost.content, 
          egobrost.up, 
          egobrost.down, 
          egobrost.timedata, 
          egobrost.realtime, 
          egobrost.attached, 
          egobrost.replies, 
          egobrost.ext, 
          egobrost.onpage, 
          egobrost.touser, 
          egobrost.isego, 
          egobrost.category, 
          brostpublic.id, 
          brostpublic.postid, 
          brostpublic.content, 
          brostpublic.up, 
          brostpublic.down, 
          brostpublic.timedata, 
          brostpublic.realtime, 
          brostpublic.attached, 
          brostpublic.replies, 
          brostpublic.ext, 
          brostpublic.category, 
          brostpublic.isego 
     FROM recent 
LEFT JOIN brostplain ON recent.brosttype=brostplain.brosttype 
      AND recent.postid=brostplain.postid 
LEFT JOIN brostpublic ON recent.brosttype=brostpublic.brosttype 
      AND recent.postid=brostpublic.postid 
LEFT JOIN egobrost ON recent.brosttype=egobrost.brosttype 
      AND recent.postid=egobrost.postid 
LEFT JOIN egos ON egos.egoid=egobrost.egoid
LEFT JOIN members ON brostplain.id=members.id OR brostpublic.id=members.id 
    WHERE recent.id='2' ORDER BY recent.realtime DESC
于 2013-01-05T10:57:38.723 に答える