有一个场景。有一个问答网站。回答者可以修改他的答案,修改历史记录保存在服务器上。默认情况下,仅显示每个答案的最新版本。
select * from answers where questionid='$questionid' group by answerer_id
所以我可以通过回答者对所有答案进行分组,然后我需要选择每个子组的最新版本。怎么做到这一点?
答案 0 :(得分:1)
进行自我加入并找到没有更高ID的用户/问题:
SELECT a.*
FROM answers AS a
LEFT JOIN answers AS b
ON a.answerer_id = b.answerer_id
AND a.question_id = b.question_id
AND a.id < b.id
WHERE
b.id IS NULL
或者,如果你有时间戳,你可以使用它。
答案 1 :(得分:0)
如果您使用的是自动增量ID,则可以根据最高ID进行选择。
可能的SQL:
select * from answers where questionid='$questionid'
and id in (select max(id) from answers group by answerer_id)
答案 2 :(得分:0)
GROUP BY子句似乎只使用第一个可用行,因此您可以尝试使用子查询重新排列它们,以便最新的答案位于最前面。
SELECT *
FROM (
SELECT * FROM `answers`
WHERE questionid='$questionid'
ORDER BY answerer_id DESC
) as `dyn_answers`
GROUP BY answerer_id