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

MySQL में PREPARE स्टेटमेंट से यादृच्छिक पंक्तियां प्राप्त करें

RAND() और PREPARE के साथ डायनामिक यादृच्छिक पंक्ति चयन

MySQL में ORDER BY RAND() LIMIT 1 सरल तरीका है, लेकिन बड़े टेबल पर धीमा होता है। PREPARE स्टेटमेंट के साथ डायनामिक क्वेरी बनाकर यादृच्छिक पंक्ति प्राप्त करना एक विकल्प है।

टेबल और डेटा

mysql> CREATE TABLE DemoTable(
    FirstName VARCHAR(100),
    CountryName VARCHAR(100)
);
Query OK, 0 rows affected (0.53 sec)
mysql> INSERT INTO DemoTable VALUES('Adam','US');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES('Chris','AUS');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES('Robert','UK');
Query OK, 1 row affected (0.32 sec)

सभी रिकॉर्ड

mysql> SELECT * FROM DemoTable;
+-----------+-------------+
| FirstName | CountryName |
+-----------+-------------+
| Adam      | US          |
| Chris     | AUS         |
| Robert    | UK          |
+-----------+-------------+
3 rows in set (0.00 sec)

यादृच्छिक पंक्ति प्राप्त करने की प्रक्रिया

mysql> SET @value := ROUND((SELECT COUNT(*) FROM DemoTable) * RAND());
Query OK, 0 rows affected (0.00 sec)
mysql> SET @query := CONCAT('SELECT * FROM DemoTable LIMIT ', @value, ', 1');
Query OK, 0 rows affected (0.00 sec)
mysql> PREPARE myStatement FROM @query;
Query OK, 0 rows affected (0.00 sec) Statement prepared
mysql> EXECUTE myStatement;
+-----------+-------------+
| FirstName | CountryName |
+-----------+-------------+
| Chris     | AUS         |
+-----------+-------------+
1 row in set (0.00 sec)
mysql> DEALLOCATE PREPARE myStatement;
Query OK, 0 rows affected (0.00 sec)

व्याख्या: COUNT(*) * RAND() 0 से (कुल-1) के बीच यादृच्छिक ऑफसेट देता है। PREPARE डायनामिक SQL तैयार करता है। यह तरीका ORDER BY RAND() से बड़े टेबल पर तेज़ हो सकता है।

सरल विकल्प: SELECT * FROM DemoTable ORDER BY RAND() LIMIT 1; छोटे टेबल के लिए पर्याप्त है।

  1. - MySQL में NOT IN का उपयोग करके केवल विशिष्ट पंक्तियाँ हटाएं

    MySQL में DELETE स्टेटमेंट के साथ NOT IN ऑपरेटर का उपयोग करके आप उन पंक्तियों को हटा सकते हैं जो दी गई सूची में नहीं हैं। यह विशिष्ट रिकॉर्ड रखते हुए बाकी हटाने के लिए उपयोगी है। टेबल बनाएं और डेटा डालें mysql> CREATE TABLE DemoTable1830 ( StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

  1. - MySQL में INSERT INTO SELECT से एक टेबल से दूसरी टेबल में पंक्तियाँ कॉपी करें

    INSERT INTO ... SELECT स्टेटमेंट का उपयोग करके एक टेबल से दूसरी टेबल में पंक्तियाँ कॉपी करें (शर्त के साथ)। स्रोत टेबल mysql> CREATE TABLE DemoTable1879 (Id INT, Name VARCHAR(20)); mysql> INSERT INTO DemoTable1879 VALUES(101, Chris Brown), (102, David Miller), (103, Adam Smith); लक्ष्य टेबल

  1. - MySQL में IN() क्लॉज़ के साथ एक क्वेरी में रिकॉर्ड कैसे डिलीट करें?

    MySQL में एक ही क्वेरी में एकाधिक विशिष्ट रिकॉर्ड डिलीट करने के लिए, DELETE स्टेटमेंट के साथ IN() ऑपरेटर का उपयोग करें। यह एकाधिक DELETE स्टेटमेंट चलाने से अधिक कुशल और पठनीय है। उदाहरण: विशिष्ट StudentId वाले रिकॉर्ड डिलीट करना डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1922 ( StudentI