MySQL में FIND_IN_SET() फ़ंक्शन का उपयोग करके आप कॉमा-सेपरेटेड मानों वाले कॉलम में किसी विशिष्ट मान की खोज कर सकते हैं। यह तब उपयोगी होता है जब डेटा नॉर्मलाइज़्ड नहीं होता और एक कॉलम में कई मान कॉमा से अलग करके संग्रहीत होते हैं।
उदाहरण तालिका बनाना
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20),
Marks VARCHAR(200)
);
कॉमा-सेपरेटेड डेटा के साथ रिकॉर्ड डालना
mysql> INSERT INTO DemoTable (Name, Marks) VALUES ('Larry', '98,34,56,89');
mysql> INSERT INTO DemoTable (Name, Marks) VALUES ('Chris', '67,87,92,99');
mysql> INSERT INTO DemoTable (Name, Marks) VALUES ('Robert', '33,45,69,92');
डेटा देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+----+--------+-------------+ | Id | Name | Marks | +----+--------+-------------+ | 1 | Larry | 98,34,56,89 | | 2 | Chris | 67,87,92,99 | | 3 | Robert | 33,45,69,92 | +----+--------+-------------+
FIND_IN_SET() के साथ खोज करना
mysql> SELECT Id, Name FROM DemoTable WHERE FIND_IN_SET('99', Marks) > 0;
आउटपुट:
+----+-------+ | Id | Name | +----+-------+ | 2 | Chris | +----+-------+
व्याख्या: FIND_IN_SET(str, strlist) फ़ंक्शन strlist (कॉमा-सेपरेटेड स्ट्रिंग) में str की स्थिति लौटाता है। यदि मान मिलता है तो स्थिति (1-आधारित) लौटाता है, अन्यथा 0 लौटाता है। > 0 का उपयोग करके हम केवल उन पंक्तियों को फ़िल्टर करते हैं जहां मान मौजूद है।
नोट: यह फ़ंक्शन केवल कॉमा-सेपरेटेड स्ट्रिंग्स के साथ काम करता है। बेहतर डिज़ाइन के लिए, कई मानों को अलग तालिका में संग्रहीत करने पर विचार करें (नॉर्मलाइज़ेशन)।