Rand ismini kullanarak randevuyu kullanmanın bir yeri olduğunu hatırlıyorum() kötü ve sadece bunu başlatıp bunu kanıtlayan bir makale buldum. Rand() ile sipariş büyük veritabanları ile çok yavaş olabilir ve önerilen çözüm, php'de rastgele bir sayı oluşturmak ve ona göre seçim yapmaktır. Sorun, kayıtlarımı geri döndürmek için diğer alanları doğrulamamız gerektiğidir. Ayrıca silinmiş bazı eski kayıtlar da olabilir, bu da bir soruna neden olabilir. Herhangi biri belirli koşullarla eşleşen bir tablodan birkaç rasgele kayıt seçmek için iyi bir yol sağlayabilir mi (örneğin paid
alanı 1'e eşit olmalıdır)?Rastgele sonuç döndürmek (sırası ile rand())
cevap
Onlara ne kadar rastgele ihtiyacınız var? Eğer bir süper ihtiyacım yok bile dağıtım deneyin bu %(random_number)s
Eğer sorgu RAND()
tarafından sipariş olabilir
Bu güzel bir fikir, ancak aynı sonuçları bir dizi defa görüntüleme riskini göze alamıyorum. Bu sadece insanlara kötü bir randomizasyon sistemine sahip olduğumu söyleyecektir. + re –
@php_nub_qq olsa bile her seferinde – cmd
sorgusunu gerçekleştirdiğinizde yeni bir rasgele sayı oluşturuyorsanız farklı bir kayıt olacak Evet biliyorum ama 2 - 8 kayıt döndürmem gerekiyor. Rastgele sayı maks (pk_id) -8 (maksimum rand değeri olarak belirlediğim) ise, pk_id-7 ve pk_id-6 her zaman gösterilecektir. Ve eğer 8 sayısı 8 ise geri dönmek zorunda olduğum kayıt sayısı her zaman ardışık olacaktır. Ben 8 ayrı sorgular çalıştırmak istemiyorum –
nedeni her çalıştırdığınızda rejenere max(pk_id)-1
için 0
rastgele numarasını içeren bir bağlama değişkeni olan
select min(pk_id) from my_table where pk_id > %(random_number)s and paid=1
Yavaş yavaş, bir şey döndürmeden önce tablonun tamamını sıralamak için veritabanını zorlamanızdır. Sadece yükün tek bir tabloya indirgenmesi daha hızlıdır (yine de biraz yavaş olsa da). ,
SELECT *
FROM my_table
WHERE RAND() < 0.1
ORDER BY RAND()
LIMIT 100
Bu tablodaki tüm satırları yaklaşık% 1'ini seçecektir bunları sıralamak ve Sadece üst 100'e dönmek:
Bu
adil sıralamayı kaçınarak yol parçasını almak anlamına gelir Burada ana sorunun (yanı cmd'nin cevabı ile birlikte), sorgunun hiçbir şey döndürmediğinden emin olamayacağınızı unutmayın. Yukarıdaki yaklaşım, tam bir tablo taraması (hangi satırların kullanılacağına karar vermek için) ve ardından satırların yaklaşık% 1'ini içermelidir. Çok fazla satırınız varsa, yüzdeyi buna göre azaltabilirsiniz.Bir şeyleri iade edeceğime ve geri dönen kayıtların tamamen rastgele olduğundan emin olmam gerektiğinden emin olmalıyım. Daha iyi bir seçenek yoksa, @ cmd'nin önerisini kullanırdım ve birkaç soruyu daha fazla çalıştırırdım. –
Fakat @ cmd'nin önerisi aynı zayıflığa sahip - bir şey döndüreceğinden emin olamazsınız. – mzedeler
Neden değil? Bir şeyi nasıl iade edeceğini anlamıyorum. –
- 1. Google Drive SDK'daki Sonuç Sırası SDK
- 2. MySQL ile rastgele satır seçimi
- 3. x ile bölünemez rastgele bir sayı üretin?
- 4. SELECT deyiminden sonuç alınamazsa bir dize döndürmek için CASE kullanılması
- 5. Grants GORM, tablodan rastgele satırları döndürmek için mi? Benim grails uygulamasında
- 6. C, rand işlevi sleep() işleviyle düzgün çalışmıyor
- 7. görüntü ile görüntüyü döndürmek nasıl?
- 8. Belirli bir aralıkta sayı yapmak için rand işlevini nasıl kullanırım?
- 9. Ruby rand() değişkenleri kabul edemiyor?
- 10. Boru hattı ile çalışma sırası
- 11. Google BigQuery'deki Rastgele Örnekleme
- 12. Spark - Rastgele Sayı Üretimi
- 13. rastgele bir sayı
- 14. Rastgele zaman gecikmesi
- 15. Satırı concat ile grupla seçin ve RAND kullanarak sınırlayın()
- 16. Rastgele değeri listeden döndürme
- 17. Görevler - Rastgele
- 18. Rastgele şifre ile Redis AUTH
- 19. PHP, Rastgele dizi tuşu ile
- 20. Rastgele görünüm Twig ile görünümde
- 21. NextDouble ile Rastgele Sayı (C#)
- 22. Dosyada rastgele çizgi
- 23. LINQ ile farklı bir IQueryable döndürmek?
- 24. String.replaceAllSenkronize olmayan sonuç ile eşleşti
- 25. PDO ile sorgudan sonuç görüntülenemiyor
- 26. RxJava2 diziliş sırası ile karşılaştırılabilir diziliş sırası ile çağrıldı ve Zaman operatörü
- 27. ajax sırası: true
- 28. Geçişli iki görüntülü rastgele slayt gösterisi
- 29. Rastgele sayı: 0 veya 1
- 30. Kitaplık yüklenemiyor: reloc_library [1285]: 'rand' bulunamıyor
Eğer php kullanıyorsanız, 'shuffle' işlevini kullanın. sonuçlarınızı alın ve programınızda karıştırın. –
Peki ya 100,000 sonuç döndüyse, o kadar çok sayıda sonuç almak için php içine çok sayıda sonuç çeken bu –
@FabianBigler'ı almak istemiyorum. N '. – Kevin