0
SELECT * FROM forum_posts AS post 

INNER JOIN( SELECT parent AS rparent, author AS rauthor, MAX(created_at( AS rdate FROM forum_replies) AS reply
ON post.id = reply.rparent 

そのスレッドの最新の返信が 1 つあるフォーラムからすべてのレコードを取得したいと考えています。問題は、制限が親クエリにも影響を与え、1 つのスレッドのみが返されることです。

事前に感謝します。

4

1 に答える 1

1
  1. @AgRizzoが上でコメントしたように、おそらくサブクエリをグループ化する必要があります。

  2. さらに、内部結合では、両方のテーブルで結合基準が一致するレコードのみが生成されます。つまり、返信がない投稿は除外されます。

    結合基準が一致しない場合でも 1 つのテーブルからレコードを保持する場合は、外部結合が必要になります。この場合、左外部結合 (結合の左オペランドからのレコードが常に結果セットに含まれるようにするため)。

    詳細については、SQL 結合の視覚的な説明を参照してください。

したがって:

SELECT * FROM forum_posts AS post LEFT JOIN (
  SELECT   parent          AS rparent
    ,      author          AS rauthor
    ,      MAX(created_at) AS rdate
  FROM     forum_replies
  GROUP BY parent
) AS reply ON post.id = reply.rparent

または、結合にグループ化を実行します。

SELECT      post.*
  ,         reply.parent          AS rparent
  ,         reply.author          AS rauthor
  ,         MAX(reply.created_at) AS rdate
FROM        forum_posts           AS post
  LEFT JOIN forum_replies         AS reply ON reply.parent = post.id
GROUP BY    post.id
于 2013-10-13T13:12:19.247 に答える