परिचय
जब किसी कॉलम में कॉमा से अलग मान (comma-separated values) स्टोर होते हैं, तो MySQL का FIND_IN_SET() फंक्शन उसमें किसी विशेष मान को खोजने के लिए सबसे उपयुक्त होता है।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable (
-> Value VARCHAR(20)
-> );
Query OK, 0 rows affected (0.47 sec)
mysql> INSERT INTO DemoTable VALUES('41,14,94');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable VALUES('64,84,94');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES('44,74,103,104');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable VALUES('904,1004,1444,1544');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES('4,144,174');
Query OK, 1 row affected (0.15 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+--------------------+
| Value |
+--------------------+
| 41,14,94 |
| 64,84,94 |
| 44,74,103,104 |
| 904,1004,1444,1544 |
| 4,144,174 |
+--------------------+
5 rows in set (0.00 sec)
FIND_IN_SET के साथ खोज क्वेरी
mysql> SELECT * FROM DemoTable WHERE FIND_IN_SET('4', Value);
परिणाम
+-----------+
| Value |
+-----------+
| 4,144,174 |
+-----------+
1 row in set (0.00 sec)
व्याख्या
FIND_IN_SET('4', Value)- '4' को कॉमा-सूची में पूर्ण तत्व के रूप में खोजता है- '41', '14', '94', '104', '144' आदि में '4' नहीं मिलेगा (क्योंकि वे अलग तत्व नहीं हैं)
- केवल '4,144,174' मेल खाता है क्योंकि '4' पहला तत्व है
FIND_IN_SET vs LIKE
| फंक्शन | व्यवहार |
|---|---|
FIND_IN_SET('4', val) | सटीक तत्व '4' खोजता है |
val LIKE '%4%' | कहीं भी '4' अक्षर खोजता है (41, 14, 104 में भी मिलेगा) |
महत्वपूर्ण नोट्स
FIND_IN_SETकेवल कॉमा (`,`) सेपरेटर के साथ काम करता है- खोज स्ट्रिंग में कॉमा नहीं होनी चाहिए
- बड़े डेटासेट पर धीमा हो सकता है (इंडेक्स उपयोग नहीं कर सकता)
- बेहतर डिज़ाइन: अलग टेबल में नॉर्मलाइज़्ड संबंध (one-to-many) उपयोग करें
FIND_IN_SET लीगेसी डेटा या सरल उपयोग के लिए ठीक है, लेकिन नए डिज़ाइन में जंक्शन टेबल बेहतर है।