次のリレーショナルスキーマを持つデータベースがあると想像してください。
forums(id, title)
forum_topics(id, forum_id, title, count_views, some_data)
forum_posts(id, topic_id, title, content, author_id, another_data)
そして、forums_postsテーブルにデータを含む2つの行があるとします。
(1, 1, 'some title', 'some content', 4, 'blahr')
(2, 1, 'another post title', 'my content', 5, 'nah')
ここで、トピックID、そのトピックの投稿数、およびトピックへの最新の寄稿者のユーザーIDを提供するSQLステートメントを作成します。最初の2つの値を取得することは明らかに問題ではありませんが、後者はかなり注意が必要です。これが私がこれまでに持っているものです:
SELECT topic_id,
COUNT(*) AS count_posts,
forum_posts.author_id AS last_answer_by
FROM forum_posts
JOIN forum_topics ON forum_posts.topic_id = forum_topics.id
GROUP BY topic_id
上記のクエリは、id = 1のforum_topicsエントリがあると仮定すると、私に与えられます。
topic_id = 1
count_posts = 2
last_answer_by = 4
高い投稿IDは、低いIDの投稿エントリよりも後で書き込まれたことを意味しますが、取得したいのは次のとおりです。
topic_id = 1
count_posts = 2
last_answer_by = 5