परिचय
जब किसी कॉलम में कॉमा से अलग मानों की सूची (ऐरे-जैसी संरचना) स्टोर होती है, तो 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 कॉलम बेहतर विकल्प है क्योंकि यह इंडेक्सिंग और जटिल क्वेरीज का समर्थन करता है।