私はソーシャルネットワークを作成していますが、かなり特殊なケースがあり、ほぼ正しいクエリがあります。1つのクエリにマージする6つのテーブルがあります。テーブルは、テーブル、、、およびrecent
の正確な行を見つけるために使用されます。また、テーブルで一致するものを見つけると複雑になります。ここで、members.usernameは列IDと一致し、egos.egonameは列で一致します。これらはすべて、recent.realtime列のunixタイムスタンプでソートされています。現在のクエリは次のとおりです。brostplain
egobrost
brostpublic
members
egos
brostplain
brostpublic
egobrost
egoid
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
。これで結果セットが完成しました。貢献してくれた人たちに感謝します。