Существует сценарий. Существует веб-сайт с запросом и ответом. Ответчик может изменить свой ответ, а история изменений сохраняется на сервере. По умолчанию отображается только последняя версия каждого ответа.
select * from answers where questionid='$questionid' group by answerer_id
Итак, я могу сгруппировать все ответы ответчиком, тогда мне нужно выбрать последнюю версию каждой подгруппы. Как достичь этого?
Предложение GROUP BY, по-видимому, просто использует первую доступную строку, поэтому вы можете попробовать использовать подзапрос, чтобы перенастроить их, чтобы последний ответ был сверху.
SELECT *
FROM (
SELECT * FROM `answers`
WHERE questionid='$questionid'
ORDER BY answerer_id DESC
) as `dyn_answers`
GROUP BY answerer_id
answers
WHERE questionid = '$ questionid' ORDER BY answer_id DESC) как dyn_answers
GROUP BY answerer_id
Сделайте самостоятельное соединение и найдите пользователя/вопрос без более высокого 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
Или, если у вас есть метка времени, вы можете использовать ее.
Если вы используете идентификаторы автоинкремента, вы можете выбрать на основе самого высокого идентификатора.
Возможный SQL:
select * from answers where questionid='$questionid'
and id in (select max(id) from answers group by answerer_id)
MAX(date)
получит самое последнее, но вам нужно предоставить более подробную информацию о столбцах в таблицеANSWERS
.