2016-04-01 15 views
0

Tam olarak 6 rastgele 'eğlence' girdisini görüntülemeye çalışıyorum, ancak şu anki sorgumla, 1 ile 6 arasında rastgele bir sayı alıyor ve bu sayıda girdi görüntüleniyor. Makalelerim tablosundan tam olarak rastgele 6 eğlence girişi görüntülemek için bu sorguyu nasıl güncellerim? İşte benim şimdiki sorgu var şu şekildedir:Tablodan tam olarak rastgele girişleri görüntüleme

SELECT 
    r1.* 
FROM 
    Articles AS r1 
    INNER JOIN (SELECT(RAND() * (SELECT MAX(id) FROM Articles)) AS id) AS r2 
WHERE 
    r1.id >= r2.id 
    AND r1.category = 'entertainment' 
LIMIT 6; 

tablo yapısı şöyledir:

table Articles 
- id (int) 
- category (varchar) 
- title (varchar) 
- image (varchar) 
- link (varchar) 
- Counter (int) 
- dateStamp (datetime) 
+0

Tablo yapınıza biraz bilgi verebilirsiniz. İlgili sütunlar nelerdir ve "r1" tablosu ne anlama geliyor? – Pevara

+0

@Pevara Makaleler tablosunda 7 sütun var. id (benzersiz), kategori (makalenin kategorisi, yani eğlence), başlık (makalenin başlığı), resim (makalenin resim URL'si), bağlantı (makalenin URL'si), Sayaç (makalenin görünümü vardır), dateStamp (makalenin yayınlandığı tarih). – user2896120

cevap

1

Dene:

SELECT 
    r1.* 
FROM 
    Articles AS r1 
WHERE 
    r1.category = 'entertainment' 
ORDER BY RAND() 
LIMIT 6; 

Bunu size alt sorgu ile çalıştı Ne olduğunu tahmin?

+0

Performansı – user2896120

+0

verimsiz olduğundan, ORDER BY RAND() yöntemini kullanmamaya çalışıyorum http://stackoverflow.com/questions/6541644/selecting-random-rows-with-mysql/6542113#6542113? – Tom

+0

'ORDER BY RAND()' gerçekten iyi ölçeklenmez, ancak binlerce makaleyi beklemediğiniz sürece, etkinin ihmal edilebilir olduğundan şüpheliyim. Ve işleri mümkün olduğunca basit tutmanın büyük bir hayranıyım ... – Pevara

İlgili konular