Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL का उपयोग करके दो अल्पविराम से अलग स्ट्रिंग सूचियों की तुलना कैसे करें

ऐसा प्रतीत होता है कि आप एक सरणी चौराहा करना चाहते हैं, सिवाय इसके कि आपकी सरणी एक एकल स्तंभ है। यह किया जा सकता है, लेकिन यह धीमा होगा, डिबग करना मुश्किल होगा और रिलेशनल डेटाबेस की शक्ति का लाभ नहीं उठाएगा। एक बेहतर तरीका यह होगा कि आप अपनी टेबल स्कीमा को कुछ इस तरह से बदलें:

टेबल समूह

group_id int unsigned not null auto_increment primary key,
character_list text

टेबल सदस्य_इन_ग्रुप

group_id int unsigned not null,
group_member varchar(45) not null

फिर आप इस तरह क्वेरी कर सकते हैं:

SELECT group_id, character_list
FROM groups g 
  JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);

groups तालिका शायद आपकी वर्तमान तालिका की तरह है। members_in_groups तालिका वही डेटा है जिसे आसानी से खोजने योग्य भागों में काटा जाता है।

ईटीए ने आपकी टिप्पणी दी, यह काम करना चाहिए अगर आप गारंटी दे सकते हैं कि प्रत्येक character_list केवल एक शामिल है प्रत्येक वर्ण का उदाहरण:

SELECT group_id, 
       SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) AS tally, 
       character_list
FROM groups g
  JOIN members_in_groups m ON (g.group_id=m.group_id)
GROUP BY group_id
  HAVING SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) = 3;

इस मामले में HAVING क्लॉज 3 के बराबर होना चाहिए क्योंकि IN ('Mr. T', 'Apollo', 'Rocky') में 3 सदस्य हैं। ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 1114 (HY000):तालिका भरी हुई है

  2. प्रत्येक शब्द की आवृत्ति की गणना करें

  3. मैं रन टाइम पर विभिन्न डेटाबेस से कैसे जुड़ सकता हूँ?

  4. केवल mysqldump डेटा

  5. PHP एकाधिक ऑब्जेक्ट फ़ंक्शन कॉल