MySQL में REPLACE और FIND_IN_SET के साथ सेमीकोलन-सेपरेटेड सूची में मान खोजना
FIND_IN_SET() केवल अल्पविराम (,) सेपरेटर के साथ काम करता है। सेमीकोलन (;) या अन्य सेपरेटर के लिए, पहले REPLACE() से सेपरेटर बदलें।
व्यावहारिक उदाहरण
तालिका बनाना
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value VARCHAR(100)
);
सेमीकोलन से अलग मान डालना
mysql> INSERT INTO DemoTable(Value) VALUES('100;200;300');
mysql> INSERT INTO DemoTable VALUES('1;300;400');
mysql> INSERT INTO DemoTable VALUES('6;7;8;9;10');
mysql> INSERT INTO DemoTable VALUES('1;2;3;4;5');
mysql> INSERT INTO DemoTable VALUES('3;8;9;10');
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+----+-------------+ | Id | Value | +----+-------------+ | 1 | 100;200;300 | | 2 | 1;300;400 | | 3 | 6;7;8;9;10 | | 4 | 1;2;3;4;5 | | 5 | 3;8;9;10 | +----+-------------+
मान 8 वाली पंक्तियां खोजने के लिए क्वेरी
mysql> SELECT * FROM DemoTable WHERE FIND_IN_SET(8, REPLACE(Value, ';', ',')) > 0;
आउटपुट:
+----+------------+ | Id | Value | +----+------------+ | 3 | 6;7;8;9;10 | | 5 | 3;8;9;10 | +----+------------+
चरण-दर-चरण
REPLACE(Value, ';', ',')- सेमीकोलन को अल्पविराम में बदलता हैFIND_IN_SET(8, ...)- परिवर्तित स्ट्रिंग में 8 खोजता है> 0- मिलने पर (स्थिति 1+), TRUE
प्रदर्शन नोट
- हर पंक्ति के लिए REPLACE और FIND_IN_SET चलता है → पूर्ण तालिका स्कैन
- बड़े डेटासेट के लिए, सामान्यीकृत जंक्शन तालिका बेहतर है
- MySQL 8.0+ में
JSON_CONTAINS()याREGEXPविकल्प
बेहतर डिज़ाइन