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

अल्पविराम मानों वाली तालिकाओं में शामिल हों

मेरा सुझाव है कि आप अपने जॉइन को स्पष्ट करें।
यह आपकी क्वेरी को डिबग करना और लेफ्ट जॉइन के साथ इनर को बदलना आसान बनाता है।
एसक्यूएल '89 इंपैक्ट जॉइन सिंटैक्स का उपयोग करने का कोई अच्छा कारण नहीं है।

SELECT ni.*
       , nf.*
       , group_concat(nm.mailgroup_name) as mailgroups
FROM newsletter_items ni
INNER JOIN newsletter_fields nf 
  ON (nf.field_letter_uid = ni.letter_id)
INNER JOIN newsletter_mailgroups nm  
  ON (find_in_set(nm.mailgroup_id, ni.receivers))
WHERE  
  nf.field_name = 'letter_headline' 
  ni.template = '". $template ."' 
GROUP BY ni.letter_id;

आपके डेटाबेस डिज़ाइन के संबंध में।
मैं अनुशंसा करता हूं कि आप अपने डेटाबेस को सामान्य करें, इसका मतलब है कि आप अल्पविराम से अलग किए गए फ़ील्ड को एक अलग तालिका में ले जाते हैं।

तो आप टेबल रिसीवर बनाते हैं

Receivers
----------
id integer auto_increment primary key
letter_id integer not null foreign key references newsletter_items(letter_id)
value integer not null

फिर आप फ़ील्ड रिसीवर को newsletter_items . तालिका से हटा दें

आपकी क्वेरी तब बदल जाती है:

SELECT ni.*
       , group_concat(r.value) as receivers
       , nf.*
       , group_concat(nm.mailgroup_name) as mailgroups

FROM newsletter_items ni
INNER JOIN newsletter_fields nf 
  ON (nf.field_letter_uid = ni.letter_id)
INNER JOIN newsletter_mailgroups nm  
  ON (find_in_set(nm.mailgroup_id, ni.receivers))
LEFT JOIN receiver r ON (r.letter_id = ni.letter_id)
WHERE  
  nf.field_name = 'letter_headline' 
  ni.template = '". $template ."' 
GROUP BY ni.letter_id;

इस बदलाव से आपकी क्वेरी में भी काफी तेजी आनी चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql दोहराए जाने वाले कॉलम की पहली पंक्ति के अलावा सभी के लिए रिक्त स्थान लौटने का चयन करें

  2. mysql तैयार कथन त्रुटि:MySQLSyntaxErrorException

  3. आप SQL क्वेरी को कैसे प्रबंधित करते हैं

  4. mysqli:क्या यह एक कथन में एकाधिक प्रश्न तैयार कर सकता है?

  5. रेल एक श्रेणी के साथ क्लॉज हैश सिंटैक्स का उपयोग करके प्रश्नों में `OR 1=0` क्यों जोड़ रहा है?