Nasıl MySQL her yanıtlayanın tarafından verilen yanıtlar son sürümünü seçmek için?

3 Cevap php

Bir senaryo bulunmaktadır. Bir ask-ve-cevap sitesi var. Bir answerer onun cevabı değiştirebilir ve değişiklik tarihi sunucusuna kaydedilir. Varsayılan olun, her cevabın sadece son sürümü görüntülenir.

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

Peki, o zaman ben her alt grubun son sürümünü seçmek için grup yanıtlayanın bütün cevaplar ihtiyaç olabilir. Bunu başarmak için nasıl?

3 Cevap

GROUP BY deyimi, sadece ilk kullanılabilir satır kullanmak gibi görünüyor, bu yüzden bunu son cevap üstüne bunları yeniden düzenlemek için bir alt sorgu kullanarak deneyebilirsiniz.

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

Do kendini katılmak ve hiçbir yüksek id ile kullanıcı / soruyu bulabilirsiniz:

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

Eğer bir zaman damgası varsa Yoksa, bunu kullanabilirsiniz.

Eğer değiştirmemesi kimlikleri kullanarak, size en yüksek kimliği dayalı seçmek olabilir.

Olası SQL:

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