0

mysql クエリのヘルプが必要です。

私は3つのテーブルを持っています:

  • メンバー(ID、名前、会社)
  • 質問(id,質問)
  • questionanswerxref(id,userid,questionid,answer)

メンバーが定義済みの質問に回答すると、それが questionanswerxref テーブルに挿入されます。状況が変化し、時間が経過するにつれて、彼らは同じ質問に何度も答えることになります。各質問と特定のメンバーの最新の回答を提供するクエリを実行する必要があります (サインインしているメンバーに応じてメンバー ID を追加します)。

今のところ、私は次のものを持っていますが、いくつかのバリエーションを試しました。質問に答えていない場合は、答えなしでも表示したいと思います。

SELECT MAX( qq.id ) , coalesce( qq.answer, '' ) AS answer, q.question
FROM `questionanswerxref` qq
LEFT JOIN questions q ON q.id = qq.questionid
WHERE qq.userid = ".mysql_real_escape_string($userid)."
GROUP BY qq.id,q.id
ORDER BY q.id"

それの別のバージョンは..

select q.id,q.question, coalesce(qq.answer,'') as answer from questions q
left join questionanswerxref qq on q.id = qq.questionid AND qq.userid = ".mysql_real_escape_string($userid)."
group by q.id,qq.id

何度も質問を受け続けています。したがって、同じ質問に 4 回回答すると、それぞれが表示されます。彼らが提出した最後の回答だけが欲しいです。

簡単なように思えますが、困惑しています。

4

1 に答える 1

0

クエリの問題の 1 つは、questionanswerxref.id でグループ化することです。したがって、id はおそらくこのテーブルの主キーであるため、実際にはまったくグループ化されません。

group byもう 1 つの問題は、 dbms によっては、集計関数でも句内の言及でもないフィールドを選択していることです。

各ユーザーと回答に対して最高の ID を持つ回答が必要であると仮定すると、ユーザー ID と質問 ID でグループ化されたサブクエリを使用して、最新の回答の ID を検索し、これを質問と回答に結合できます。

SELECT q.id, q.question, coalesce(qq.answer,'') as answer
FROM questions AS q
LEFT JOIN 
    (SELECT userid, questionid, MAX(id) AS maxid
     FROM questionanswerxref
     GROUP BY userid, questionid) AS maxids  -- find latest answerid 
ON maxids.questionid = q.id
LEFT JOIN questionanswerxref AS qq           -- then join to answer
on qq.id = maxids.maxid
WHERE qq.userid = :userid
ORDER BY q.id
于 2013-03-30T22:20:24.750 に答える