各行がスレッド内の投稿を表し、列がスレッドを質問、回答、およびコメントに細分する出力テーブルを作成しようとしています。質問と回答の部分を下に置いたので、コメント セクションを追加する必要があります。
コードをいじって、コメント投稿者のために 3 番目の列を追加するために与えられた解決策を理解しようとしています。貼り付けたコードは、学生の ID の 1 つの列から 2 つの列を作成します。最初の列は質問を投稿したすべての学生で、2 番目の列は特定のスレッドで回答を投稿したすべての学生です。
クエリ元のテーブル:
thread_id student_usrnm post_type
1 iron_man question
1 orient answer
1 cyclops comment
2 green_lantern question
2 iron_man answer
... .... .....
出力:
questioners answerers commenters
iron_man orient cyclops
green_lantern iron_man
動作し、質問者と回答者を生成するコードは次のとおりです。
SELECT s1.author_id AS questioner,
(SELECT group_concat(DISTINCT author_id SEPARATOR " ") FROM students s2 WHERE s2.post_type = 'answer' AND s2.thread_id = s1.thread_id) AS answerers
FROM students s1
WHERE s1.post_type = 'question';
質問:
s1 とは何ですか? s2 とは何ですか? これらはどのように機能しますか? それらは一時テーブルか何かですか?
コメンテーター用に 3 番目の列を追加するにはどうすればよいですか? これは、3 番目の列を生成する私の哀れな試みです。
SELECT s1.author_id AS questioner, (SELECT group_concat(DISTINCT author_id SEPARATOR " ") FROM students s2 WHERE s2.post_type = 'answer' AND s2.thread_id = s1.thread_id) AS answerers, (SELECT group_concat(DISTINCT author_id SEPARATOR " ") FROM students s3 WHERE s3.post_type = 'comment' and s3.thread_id = s1.thread_id) AS commenters, FROM students s1 WHERE s1.post_type = 'question';