ORDER BY और RAND() से विशिष्ट + रैंडम चयन
MySQL में एक विशिष्ट पंक्ति को प्राथमिकता देकर और बाकी रैंडम चुनने के लिए ORDER BY (condition) DESC, RAND() का उपयोग करें।
उदाहरण
टेबल बनाएं:
mysql> CREATE TABLE oneSpecificRowAndOtherRandom (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(20)
-> );
7 नाम इन्सर्ट करें:
mysql> INSERT INTO oneSpecificRowAndOtherRandom(Name)
VALUES('Larry'), ('Sam'), ('Mike'), ('Carol'), ('Chris'), ('Bob'), ('David');
सभी रिकॉर्ड:
+----+-------+ | Id | Name | +----+-------+ | 1 | Larry | | 2 | Sam | | 3 | Mike | | 4 | Carol | | 5 | Chris | | 6 | Bob | | 7 | David | +----+-------+
Id=5 (Chris) को पहले, फिर 2 रैंडम चुनें
mysql> SELECT * FROM oneSpecificRowAndOtherRandom
-> ORDER BY (Id = 5) DESC, RAND()
-> LIMIT 0, 3;
परिणाम (पहली बार):
+----+-------+ | Id | Name | +----+-------+ | 5 | Chris | | 1 | Larry | | 2 | Sam | +----+-------+
दूसरी बार चलाने पर (RAND() बदलता है):
+----+-------+ | Id | Name | +----+-------+ | 5 | Chris | | 2 | Sam | | 4 | Carol | +----+-------+
कैसे काम करता है:
(Id = 5)- बूलियन एक्सप्रेशन, Id=5 के लिए TRUE (1), अन्य के लिए FALSE (0)DESC- TRUE (1) को पहले रखता है, इसलिए Chris सबसे ऊपरRAND()- बाकी पंक्तियों को रैंडम क्रम में व्यवस्थित करता हैLIMIT 0, 3- पहली 3 पंक्तियाँ लेता है (1 विशिष्ट + 2 रैंडम)
विस्तार: एकाधिक विशिष्ट पंक्तियाँ
ORDER BY (Id IN (5, 2)) DESC, RAND() -- Id 5 और 2 पहले, फिर रैंडम
प्रदर्शन चेतावनी: ORDER BY RAND() बड़ी टेबल पर धीमा होता है (फुल टेबल स्कैन + फाइलसॉर्ट)। बड़ी टेबल के लिए अन्य रैंडम सैंपलिंग तकनीक उपयोग करें।