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

MySQL क्वेरी: कॉमा से अलग मानों (ऐरे) से मिलान करने वाले विशिष्ट रिकॉर्ड प्राप्त करें

परिचय

जब किसी कॉलम में कॉमा से अलग मानों की सूची (ऐरे-जैसी संरचना) स्टोर होती है, तो MySQL का FIND_IN_SET() फंक्शन विशिष्ट मान वाले रिकॉर्ड खोजने के लिए उपयोग किया जाता है।

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

mysql> CREATE TABLE DemoTable1548 (
    -> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName VARCHAR(20),
    -> ArrayListOfMarks VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.88 sec)
mysql> INSERT INTO DemoTable1548(StudentName, ArrayListOfMarks) VALUES('Chris', '56,78,90,87');
Query OK, 1 row affected (0.29 sec)
mysql> INSERT INTO DemoTable1548(StudentName, ArrayListOfMarks) VALUES('Bob', '90,78,65');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1548(StudentName, ArrayListOfMarks) VALUES('David', '91,34,56,78,87');
Query OK, 1 row affected (0.16 sec)

सभी रिकॉर्ड देखना

mysql> SELECT * FROM DemoTable1548;

आउटपुट:

+-----------+-------------+------------------+
| StudentId | StudentName | ArrayListOfMarks |
+-----------+-------------+------------------+
| 1         | Chris       | 56,78,90,87      |
| 2         | Bob         | 90,78,65         |
| 3         | David       | 91,34,56,78,87   |
+-----------+-------------+------------------+
3 rows in set (0.00 sec)

कॉमा से अलग मानों से मिलान करने की क्वेरी

mysql> SELECT * FROM DemoTable1548 WHERE FIND_IN_SET('87', ArrayListOfMarks);

परिणाम

+-----------+-------------+------------------+
| StudentId | StudentName | ArrayListOfMarks |
+-----------+-------------+------------------+
| 1         | Chris       | 56,78,90,87      |
| 3         | David       | 91,34,56,78,87   |
+-----------+-------------+------------------+
2 rows in set (0.00 sec)

व्याख्या

  • FIND_IN_SET('87', ArrayListOfMarks) - '87' को कॉमा-सूची में पूर्ण तत्व के रूप में खोजता है
  • Chris (56,78,90,87) और David (...,78,87) मेल खाते हैं
  • Bob (90,78,65) मेल नहीं खाता क्योंकि 87 उसकी सूची में नहीं है

महत्वपूर्ण विचार

  • प्रदर्शन: बड़े डेटासेट पर धीमा (फुल टेबल स्कैन)
  • डिज़ाइन: बेहतर है अलग जंक्शन टेबल (StudentMarks) बनाना
  • सीमा: मानों में कॉमा नहीं होनी चाहिए
  • विकल्प: JSON कॉलम (MySQL 5.7+) और JSON_CONTAINS() उपयोग करें

JSON विकल्प (MySQL 5.7+)

ALTER TABLE DemoTable1548 MODIFY ArrayListOfMarks JSON;
SELECT * FROM DemoTable1548 WHERE JSON_CONTAINS(ArrayListOfMarks, '87');

नए एप्लिकेशन के लिए JSON कॉलम बेहतर विकल्प है क्योंकि यह इंडेक्सिंग और जटिल क्वेरीज का समर्थन करता है।

  1. - महीनों की एक श्रृंखला से रिकॉर्ड प्राप्त करने का MySQL क्वेरी?

    आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1795 ( Name varchar(20), DueDate date ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1795 values(John,2018-07-21); Query OK, 1 row affected (0.00 sec)

  1. - MySQL क्वेरी में UNIX_TIMESTAMP के साथ अलग फॉर्मेट में डेट का उपयोग करके विशिष्ट डेट के बाद के रिकॉर्ड प्राप्त करें?

    इसके लिए आप STR_TO_DATE() का उपयोग कर सकते हैं, क्योंकि हमारे पास निम्न फॉर्मेट में डेट रिकॉर्ड हैं: 21/11/2019। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1808 ( AdmissionDate varchar(20) ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड

  1. - MySQL में कॉमा सेपरेटेड मानों के साथ रैंडम पंक्तियाँ कैसे प्राप्त करें?

    MySQL में रैंडम पंक्तियाँ प्राप्त करने के लिए ORDER BY RAND() का उपयोग किया जाता है। यदि आपके कॉलम में कॉमा सेपरेटेड मान हैं, तो आप NOT IN के साथ फ़िल्टर करके रैंडम परिणाम ले सकते हैं। टेबल बनाएं और डेटा डालें mysql> CREATE TABLE DemoTable1835 ( ListOfIds VARCHAR(20) ); mysql> INSERT INT