データベースの構造がわからない場合は、次のようになります。 *
を置き換える必要があることに注意してください 実際に必要な列のより明確なリストを持つ文字。
SELECT p.*, c.*, u.* FROM posts p
LEFT JOIN comments c ON c.post_id = p.id
LEFT JOIN users u ON u.id = p.author_id
カウントや合計などを取得しようとしているだけの場合は、その情報の一部をキャッシュすることをお勧めします。たとえば、クエリごとにコメント数をカウントするのではなく、投稿テーブルにコメント数をキャッシュしたい場合があります。コメントを追加/削除する場合にのみ、コメント数をカウントして更新してください。
編集: 各コメントにユーザーデータも添付したいということに気づきました。同じテーブルに複数回参加できますが、見苦しくなります。これは非常に高価なクエリになる可能性があります。混乱を少なくするために、列のエイリアスを作成する方法の例も含めています。
SELECT p.*, c.*, u.name as post_author, u2.name as comment_author FROM posts p
LEFT JOIN comments c ON c.post_id = p.id
LEFT JOIN users u ON u.id = p.author_id
LEFT JOIN users u2 ON u2.id = c.author_id