Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में प्रारंभिक पंक्तियाँ रैंडम और शेष क्रमबद्ध कैसे चुनें?

MySQL में परिणाम सेट के पहले भाग को रैंडम क्रम में और शेष भाग को विशिष्ट क्रम में प्राप्त करने के लिए, ORDER BY CASE स्टेटमेंट का उपयोग करें। यह फीचर्ड/प्रायोरिटी आइटम को रैंडमाइज़ करके दिखाने और बाकी को क्रमबद्ध रखने के लिए उपयोगी है।

उदाहरण: 'Highest' प्रायोरिटी रैंडम, 'Lowest' क्रमबद्ध

डेमो टेबल बनाएं:

mysql> CREATE TABLE DemoTable1926 (
    Position VARCHAR(20),
    Number INT
);

डेटा इन्सर्ट करें:

mysql> INSERT INTO DemoTable1926 VALUES
('Highest', 50), ('Highest', 30),
('Lowest', 100), ('Lowest', 120), ('Lowest', 90);

डेटा:

+----------+--------+
| Position | Number |
+----------+--------+
| Highest  | 50     |
| Highest  | 30     |
| Lowest   | 100    |
| Lowest   | 120    |
| Lowest   | 90     |
+----------+--------+

ORDER BY CASE के साथ क्वेरी:

mysql> SELECT * FROM DemoTable1926
ORDER BY Position DESC,
         CASE Position WHEN 'Highest' THEN RAND() ELSE Number END ASC;

आउटपुट (Highest रैंडम, Lowest Number द्वारा ASC):

+----------+--------+
| Position | Number |
+----------+--------+
| Lowest   | 90     |
| Lowest   | 100    |
| Lowest   | 120    |
| Highest  | 50     |
| Highest  | 30     |
+----------+--------+

व्याख्या

  1. Position DESC: 'Lowest' पहले आता है (L > H वर्णानुक्रम में), फिर 'Highest'
  2. CASE Position WHEN 'Highest' THEN RAND() ELSE Number END:
    • 'Highest' पंक्तियों के लिए: RAND() → रैंडम क्रम
    • 'Lowest' पंक्तियों के लिए: Number → संख्यात्मक क्रम
  3. ASC: दोनों समूहों के लिए आरोही क्रम

वैकल्पिक: UNION ALL दृष्टिकोण (अधिक स्पष्ट)

(SELECT * FROM DemoTable1926 WHERE Position = 'Highest' ORDER BY RAND())
UNION ALL
(SELECT * FROM DemoTable1926 WHERE Position = 'Lowest' ORDER BY Number);

उपयोग के मामले

  • फीचर्ड प्रोडक्ट्स को रैंडमाइज़ करना, बाकी को कीमत के अनुसार क्रमबद्ध
  • प्रायोरिटी नोटिफिकेशन को मिक्स करना, सामान्य को तारीख के अनुसार
  • A/B टेस्टिंग के लिए वेरिएंट रैंडमाइज़ करना

प्रदर्शन नोट

RAND() बड़े डेटासेट पर धीमा हो सकता है क्योंकि यह इंडेक्स का उपयोग नहीं कर सकता। बड़े 'Highest' समूह के लिए, एप्लिकेशन लेयर पर रैंडमाइज़ करना या ORDER BY RAND() LIMIT N के साथ सबक्वेरी बेहतर हो सकती है।

  1. - MySQL में SUBSTRING और LOCATE से LIKE मिलान वाला उपस्ट्रिंग निकालकर नया कॉलम बनाएं

    LOCATE() से उपस्ट्रिंग की स्थिति खोजें और SUBSTRING() से निकालकर नया कॉलम बनाएं। टेबल बनाएं mysql> CREATE TABLE DemoTable1872 (Name VARCHAR(50)); डेटा डालें mysql> INSERT INTO DemoTable1872 VALUES(John Doe), (Adam Smith), (Mitchell Johnson); John मिलान निकालें mysql> SELECT Name, SUB

  1. - MySQL में NOW() से वर्तमान दिनांक से पहले की तिथि वाले रिकॉर्ड चुनें

    WHERE date_column < NOW() या CURDATE() का उपयोग करके वर्तमान दिनांक/समय से पहले की तिथि वाले रिकॉर्ड चुनें। टेबल बनाएं mysql> CREATE TABLE DemoTable1877 (DueDate DATETIME); डेटा डालें mysql> INSERT INTO DemoTable1877 VALUES(2019-12-10), (2019-12-05), (2019-12-07), (2019-12-09); वर्तमान दिना

  1. - MySQL में CONCAT_WS() से कन्कैटिनेट करके शर्त के साथ ROW कैसे चुनें?

    CONCAT_WS() फ़ंक्शन CONCAT_WS(separator, col1, col2, ...) सेपरेटर के साथ कॉलम जोड़ता है। उदाहरण insert into demo38 values(10,John,Smith,1990-10-01), (11,David,Miller,1994-01-21), (11,John,Doe,1992-02-01), (12,Adam,Smith,1996-11-11), (13,Chris,Brown,1997-03-10); क्वेरी: user_id 11 और 13 के लिए फ़