रैंड () बीज
MySQL सिस्टम क्लॉक टू सीड RAND()
. का उपयोग करता है जब कोई दूसरा मूल्य नहीं है। बीज मान माइक्रोसेकंड में है, और मैं RAND()
. की समस्या को पुन:उत्पन्न नहीं कर सकता जैसा कि आप वर्णन कर रहे हैं, उसी मान का दो बार उत्पादन करना।
यदि आप MySQL वर्कबेंच खोलते हैं और एक ही समय में दो स्टेटमेंट निष्पादित करते हैं। प्रत्येक के लिए आउटपुट अलग है।
SELECT RAND();
SELECT RAND();
जब आप एक से अधिक टैब खोलते हैं और समान परिणाम प्राप्त करते हैं। यह संभवतः एक कैशिंग समस्या है, लेकिन आप कहते हैं कि आप कैशिंग को रोकने के लिए URL पर मुहर लगा रहे हैं। इसलिए सर्वर पर SQL लॉगिंग सक्षम करें और सत्यापित करें कि नई क्वेरीज़ कॉल की जा रही हैं।
रैंड() प्रदर्शन
ORDER BY RAND()
धीमा है क्योंकि इसे पूरी तालिका को पढ़ने के लिए MySQL की आवश्यकता होती है। यहां तक कि ORDER BY RAND() LIMIT 1
अभी भी पूरी तालिका को पढ़ने के लिए MySQL की आवश्यकता है।
अद्यतन करें:
आप देख सकते हैं कि SQL क्या यादृच्छिक मान उत्पन्न कर रहा है।
$query = "SELECT *, RAND() AS `X`
FROM customers
WHERE customer_group='consumables' AND customer_updated < DATE_SUB(NOW(), INTERVAL 1 DAY)
ORDER BY `X`
LIMIT 10";
इसमें कॉलम X
. शामिल होगा प्रत्येक पंक्ति के लिए। क्वेरी को ऑर्डर करने के लिए उपयोग किया जाने वाला यादृच्छिक मान। इसे आउटपुट में जोड़ें और देखें कि क्या प्रत्येक ब्राउज़र वास्तव में . है MySQL से वही परिणाम सेट लौटाता है।