2009-12-06 26 views
0

有一種情況。有一個問答網站。回答者可以修改他的答案,修改的歷史記錄保存在服務器上。默認情況下,只顯示每個答案的最新版本。如何選擇每個答案者在MySQL中給出的答案的最新版本?

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

因此,我可以通過回答者將所有答案分組,然後我需要選擇每個子組的最新版本。如何實現這一目標?

+1

'MAX(date)'會得到最近的,但是你需要提供關於'ANSWERS'表中的列的更多細節。 – 2009-12-06 06:38:01

+0

如果我想在此期間獲得修改的次數,該怎麼辦? – Steven 2009-12-06 06:50:14

回答

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 answer_id DESC )作爲'dyn_answers' GROUP BY answerer_id – Steven 2009-12-06 06:53:23

+0

這正是我寫的,只是不表格名稱上的back-ticks ... – Atli 2009-12-06 06:56:28

+0

PS,你可以將'SELECT *,COUNT(answerer_id)作爲'num_revisions''來獲得修訂版本號。 – Atli 2009-12-06 06:58:23

0

如果您使用自動增量ID,您可以根據最高ID進行選擇。

可能的SQL:

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

這是一個解決方案。 – Steven 2009-12-06 06:46:03

+0

如果我想同時獲取修改的數量會怎麼樣? – Steven 2009-12-06 06:48:50

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 

或者,如果你有一個戳,你可以使用它。