2009-12-06 4 views
0

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

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

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

+1

'MAX (date)' будет получать самые последние данные, но вам нужно предоставить более подробную информацию о столбцах таблицы 'ANSWERS'. –

+0

Что делать, если я хочу получить количество изменений за это время? – Steven

ответ

0

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

SELECT * 
FROM (
    SELECT * FROM `answers` 
    WHERE questionid='$questionid' 
    ORDER BY answerer_id DESC 
) as `dyn_answers` 
GROUP BY answerer_id 
+0

ли вы имеете в виду SELECT * FROM ( SELECT * FROM 'answers' WHERE QuestionID = '$ QuestionID' ORDER BY DESC answer_id ) как' dyn_answers' GROUP BY answerer_id – Steven

+0

Это именно то, что я написал, только без обратные тики на имена таблиц ... – Atli

+0

PS, вы можете сделать SELECT *, COUNT (answerer_id) как 'num_revisions'', чтобы получить количество изменений. – Atli

0

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

Возможный SQL:

select * from answers where questionid='$questionid' 
    and id in (select max(id) from answers group by answerer_id) 
+0

Это решение. – Steven

+0

Что делать, если я хочу получить количество изменений за это время? – Steven

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 

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

Смежные вопросы