Mysql Hem spesifik hem de rastgele satırları bir kerede seçmek


Hazırlamış olduğum sınav sistemi için soruları bir tabloda ve sorulara ait seçenekleri ayrı tablolarda tutuyordum. Soru her geldiğinde seçenekler aynı sırada ve aynı değerlerde olmaması için bir soruya gereğinden fazla sayıda seçenek eklemeyi düşündüm.

Bunun için bir sorular tablosu ve bu tablonun birincil anahtarını yabancı anahtar yaptığım seçenekler tablosunu oluşturdum.

SELECT * FROM `secenekler` WHERE soruid = 1 AND dogru = 1

şeklinde bir sorgu ile ilgili soruya ait doğru seçeneği elde etmiş oluyorum. Bunun yanına da dört tane rastgele yanlış seçeneği eklemek istedim.

SELECT   * 
FROM `secenekler` 
WHERE soruid = 1 AND 
      dogru = 0 AND 
      id IN( 
             SELECT  id 
             FROM    `secenekler` 
             ORDER BY RAND() 
             LIMIT 4
            )

şeklinde ikinci bir sorgu ile de bu soruya ait doğru olmayan, yanıltıcı dört seçeneği de elde ettikten sonra sorunun altına bunları ekleyebilirim.

Fakat bu yapılanlar oldukça acemice geldi bana.

SELECT * FROM (
    SELECT *
    FROM `secenekler`
    WHERE soruid = 1
    ORDER BY dogru DESC, RAND()
    LIMIT 5
) AS t
ORDER BY RAND()

şeklinde bir sorgu ile harika bir şekilde kodlama bile yapmadan rastgele dört yanlış seçenek ve doğru seçeneği elde etmiş oldum.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s