Как выбрать последнюю версию ответов, данных каждым ответчиком в MySQL? - PullRequest
0 голосов
/ 06 декабря 2009

Есть сценарий. Существует веб-сайт вопросов и ответов. Ответчик может изменить свой ответ, и история изменений сохраняется на сервере. По умолчанию отображается только последняя версия каждого ответа.

select * from answers where questionid='$questionid' group by answerer_id 

Таким образом, я могу сгруппировать все ответы по ответу, затем мне нужно выбрать последнюю версию каждой подгруппы. Как этого добиться?

Ответы [ 3 ]

1 голос
/ 06 декабря 2009

Выполните самостоятельное присоединение и найдите пользователя / вопрос без более высокого идентификатора:

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

Или, если у вас есть временная метка, вы можете использовать ее.

0 голосов
/ 06 декабря 2009

Кажется, что предложение GROUP BY использует только первую доступную строку, поэтому вы можете попробовать использовать подзапрос, чтобы переупорядочить их так, чтобы последний ответ был сверху.

SELECT * 
FROM (
    SELECT * FROM `answers`
    WHERE questionid='$questionid'
    ORDER BY answerer_id DESC
) as `dyn_answers` 
GROUP BY answerer_id
0 голосов
/ 06 декабря 2009

Если вы используете идентификаторы автоинкремента, вы можете выбрать на основе самого высокого идентификатора.

Возможный SQL:

select * from answers where questionid='$questionid' 
    and id in (select max(id) from answers group by answerer_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...