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

MySQL सीमांकित डेटा का चयन करें

जैसा कि ऊपर स्ट्रॉबेरी की टिप्पणी से पता चलता है, ऐसा करने का एक तरीका है, लेकिन यह बहुत बदसूरत है। यह डक्ट टेप का उपयोग करके अपने महंगे किचन रीमॉडेल को खत्म करने जैसा है। आपको उस व्यक्ति के प्रति नाराजगी महसूस करनी चाहिए जिसने इस तरह से डेटाबेस तैयार किया है।

SELECT g.id_group, GROUP_CONCAT(n.Names SEPARATOR ' ') AS Names
FROM groups AS g JOIN names AS n
  ON FIND_IN_SET(n.id_names, REPLACE(g.Name, '|', ','))
GROUP BY g.id_group;

आउटपुट, MySQL 5.6 पर परीक्षण किया गया:

+----------+---------------+
| id_group | Names         |
+----------+---------------+
|        1 | Joe Mary Bill |
|        2 | Fred Mary     |
|        3 | Jack Joe      |
+----------+---------------+

इस क्वेरी की जटिलता, और तथ्य यह है कि इसे एक टेबल-स्कैन करने के लिए मजबूर किया जाएगा और इसे अनुकूलित नहीं किया जा सकता है, आपको आईडी की सूची को एक सीमांकित स्ट्रिंग में संग्रहीत करने में क्या गलत है

बेहतर उपाय यह है कि एक तीसरी तालिका बनाई जाए, जिसमें आप समूह के प्रत्येक व्यक्तिगत सदस्य को एक पंक्ति में स्वयं ही संग्रहीत करते हैं। यानी प्रति समूह कई पंक्तियाँ।

CREATE TABLE group_name (
  id_group INT NOT NULL,
  id_name INT NOT NULL,
  PRIMARY KEY (id_group, id_name)
);

फिर आप सरल तरीके से क्वेरी कर सकते हैं, और आपके पास क्वेरी को बहुत तेज़ बनाने के लिए इंडेक्स बनाने का अवसर है।

SELECT id_group, GROUP_CONCAT(names SEPARATOR ' ') AS names
FROM groups
JOIN group_name USING (id_group)
JOIN names USING (id_name)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक तालिका से सभी रिकॉर्ड प्रदर्शित करना और दूसरे से मिलान रिकॉर्ड प्रदर्शित करना

  2. मैं MySQL डेटाबेस में डेटा कैसे सम्मिलित कर सकता हूँ?

  3. रेल 4 MySQL bigInt प्राथमिक कुंजी मुद्दे और त्रुटियां

  4. mysql जटिल sql

  5. इनो सेटअप में MySQL क्वेरी