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

MySQL में कॉलम मानों को शफ़ल करना

परिचय

MySQL में ORDER BY RAND() का उपयोग करके टेबल की पंक्तियों को यादृच्छिक क्रम में प्राप्त किया जा सकता है, जिससे प्रभावी रूप से कॉलम मान "शफ़ल" हो जाते हैं।

उदाहरण: टेबल बनाना और डेटा डालना

mysql> CREATE TABLE DemoTable1557 (
    -> SubjectId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> SubjectName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.91 sec)
mysql> INSERT INTO DemoTable1557(SubjectName) VALUES('MySQL');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1557(SubjectName) VALUES('MongoDB');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1557(SubjectName) VALUES('Java');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1557(SubjectName) VALUES('C');
Query OK, 1 row affected (0.13 sec)

सभी रिकॉर्ड देखना (मूल क्रम)

mysql> SELECT * FROM DemoTable1557;

आउटपुट:

+-----------+-------------+
| SubjectId | SubjectName |
+-----------+-------------+
| 1         | MySQL       |
| 2         | MongoDB     |
| 3         | Java        |
| 4         | C           |
+-----------+-------------+
4 rows in set (0.00 sec)

शफ़ल करने की क्वेरी

mysql> SELECT * FROM DemoTable1557 ORDER BY RAND();

परिणाम (उदाहरण - हर बार अलग होगा)

+-----------+-------------+
| SubjectId | SubjectName |
+-----------+-------------+
| 1         | MySQL       |
| 3         | Java        |
| 2         | MongoDB     |
| 4         | C           |
+-----------+-------------+
4 rows in set (0.00 sec)

व्याख्या

  • ORDER BY RAND() प्रत्येक पंक्ति के लिए एक यादृच्छिक संख्या उत्पन्न करता है और उसके आधार पर क्रमबद्ध करता है
  • हर निष्पादन पर अलग क्रम मिलता है
  • SubjectId मूल क्रम बनाए रखता है (यह केवल प्रदर्शन क्रम बदलता है)

प्रदर्शन नोट

ORDER BY RAND() बड़े टेबल पर धीमा होता है क्योंकि:

  • प्रत्येक पंक्ति के लिए रैंडम मान उत्पन्न करना पड़ता है
  • इंडेक्स उपयोग नहीं कर सकता
  • टेम्पररी टेबल और फाइलसॉर्ट की आवश्यकता होती है

बड़े टेबल के लिए विकल्प

-- 1. रैंडम ऑफसेट (तेज़, लेकिन पूरी तरह रैंडम नहीं)
SELECT * FROM DemoTable1557
WHERE SubjectId >= (SELECT FLOOR(RAND() * (SELECT MAX(SubjectId) FROM DemoTable1557)))
ORDER BY SubjectId LIMIT 4;

-- 2. एप्लिकेशन लेवल पर शफ़ल (सबसे तेज़)
-- सभी ID लाएं, एप्लिकेशन में शफ़ल करें, फिर IN क्लॉज से प्राप्त करें

छोटे टेबल (कुछ हजार पंक्तियों तक) के लिए ORDER BY RAND() पूरी तरह ठीक है।

  1. - MySQL में COALESCE से NULL पंक्ति के साथ कॉलम गुणा करें

    जब किसी संख्यात्मक कॉलम में NULL हो, तो गणना (जैसे गुणा) का परिणाम NULL हो जाता है। COALESCE() का उपयोग करके NULL को डिफ़ॉल्ट मान (जैसे 1) से बदल सकते हैं। टेबल बनाएं mysql> CREATE TABLE DemoTable1842 ( NumberOfItems INT, Amount INT ); डेटा डालें (एक पंक्ति में NULL) mysql> INSERT IN

  1. - एकल MySQL क्वेरी में एक कॉलम में एकाधिक मान कैसे डालें?

    सिंटैक्स एक कॉलम में एकाधिक मान डालने के लिए, निम्नलिखित सिंटैक्स का उपयोग करें: INSERT INTO yourTableName VALUES (yourValue1), (yourValue2), ... (yourValueN); उदाहरण सबसे पहले एक टेबल बनाते हैं: ); अब INSERT कमांड का उपयोग करके रिकॉर्ड डालें: INSERT INTO DemoTable2022 VALUES (Computer Science)

  1. - उदाहरणों के साथ MySQL AUTO_INCREMENT

    आइए समझते हैं कि AUTO_INCREMENT कैसे काम करता है: AUTO_INCREMENT विशेषता का उपयोग नई रो के लिए एक अद्वितीय पहचानकर्ता उत्पन्न करने के लिए किया जाता है। आइए देखें कि यह स्टेटमेंट कैसे काम करता है। उससे पहले, नीचे दी गई क्वेरी पर विचार करें: क्वेरी CREATE TABLE tableName ( id MEDIUMINT NOT NULL