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

MySQL में विशिष्ट मान को फिक्स करके बाकी पंक्तियाँ रैंडम क्रम में कैसे दिखाएं?

MySQL में किसी विशिष्ट मान वाली पंक्ति को शीर्ष पर फिक्स करके, शेष पंक्तियों को रैंडम क्रम में प्रदर्शित करने के लिए, ORDER BY में बूलियन एक्सप्रेशन और RAND() का संयोजन उपयोग करें।

उदाहरण: मान 40 को शीर्ष पर रखें, बाकी रैंडम

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

mysql> CREATE TABLE DemoTable1921 (Number INT);

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

mysql> INSERT INTO DemoTable1921 VALUES (40), (80), (820), (10);

क्वेरी:

mysql> SELECT * FROM DemoTable1921
ORDER BY (Number = 40) DESC, RAND();

आउटपुट (40 पहले, बाकी रैंडम):

+--------+
| Number |
+--------+
| 40     |
| 820    |
| 10     |
| 80     |
+--------+

व्याख्या

  1. (Number = 40): बूलियन एक्सप्रेशन, TRUE (1) यदि Number=40, FALSE (0) अन्यथा
  2. DESC: TRUE (1) को FALSE (0) से पहले रखता है → 40 शीर्ष पर
  3. RAND(): शेष पंक्तियों (जहां एक्सप्रेशन 0 है) के लिए रैंडम क्रम

सामान्य पैटर्न

-- एकाधिक मानों को प्राथमिकता दें
ORDER BY (col IN ('val1', 'val2')) DESC, RAND()

-- एक कॉलम फिक्स करें, दूसरे द्वारा क्रमबद्ध करें
ORDER BY (priority = 'high') DESC, created_at ASC

-- केस स्टेटमेंट के साथ अधिक नियंत्रण
ORDER BY CASE 
    WHEN id = 100 THEN 1
    WHEN id = 200 THEN 2
    ELSE 3
END, RAND()

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

  • फीचर्ड/स्पॉन्सर्ड आइटम शीर्ष पर, बाकी रैंडम
  • "पिक ऑफ द डे" दिखाना, अन्य रैंडम
  • पिन की गई पोस्ट शीर्ष पर, बाकी रैंडम/क्रमबद्ध

प्रदर्शन विचार

  • RAND() फाइलसॉर्ट मजबूर करता है, बड़े टेबल्स पर धीमा
  • बड़े डेटासेट के लिए: फीचर्ड आइटम अलग क्वेरी से लाएं, बाकी के लिए ORDER BY RAND() LIMIT N उपयोग करें
  • कैशिंग: रैंडम परिणाम कैश करें यदि रियल-टाइम रैंडमनेस आवश्यक नहीं

नोट

MySQL में TRUE = 1, FALSE = 0 होता है, इसलिए बूलियन एक्सप्रेशन सीधे ORDER BY में काम करते हैं। यह ट्रिक MySQL-विशिष्ट है (अन्य DB में CAST आवश्यक हो सकता है)।

  1. - MySQL में कॉलम मानों को अलग टेक्स्ट के साथ जोड़ें और एकल कॉलम में प्रदर्शित करें

    आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.93 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable values(101,Chris); Query OK, 1 row affected (0.25 sec) mysq

  1. - MySQL में IFNULL से कॉलम में NULL मानों को विशिष्ट मान से बदलें

    IFNULL(expr, default) फ़ंक्शन का उपयोग करके क्वेरी परिणाम में NULL मानों को निर्दिष्ट डिफ़ॉल्ट मान (जैसे Robert) से बदलें। टेबल बनाएं mysql> CREATE TABLE DemoTable1878 (FirstName VARCHAR(20)); डेटा डालें mysql> INSERT INTO DemoTable1878 VALUES(Chris), (NULL), (David), (NULL); NULL को Robert

  1. - MySQL में पहले तीन पंक्तियों के लिए कस्टम मान सेट करना

    ORDER BY और LIMIT से पहली N पंक्तियां अपडेट करें पहली तीन पंक्तियों के लिए एक विशिष्ट मान सेट करने के लिए ORDER BY और LIMIT 3 का उपयोग करें। टेबल बनाएं और डेटा डालें: mysql> create table DemoTable1968 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20) ); Query OK, 0 rows affected (0.0