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

MySQL को अवांछित पंक्तियों को हटाने के लिए SQL को परिभाषित करने में मदद चाहिए

DISTINCT SELECT में सभी कॉलम पर काम करता है, इसलिए क्या आप सब कुछ चुन रहे हैं, यह प्रत्येक अलग पंक्ति को लौटाएगा, न कि केवल अलग-अलग पोस्ट। इसे पूरा करने के लिए आप केवल पोस्ट टेबल से डेटा का चयन कर सकते हैं और फिर इसे DISTINCT कर सकते हैं, यानी

SELECT DISTINCT posts.*

लेकिन आपने यह भी कहा है कि यदि संभव हो तो आप पोस्ट और बिल्लियों की जानकारी भी चाहेंगे। ऐसा करने और प्रति पोस्ट एक पंक्ति रखने का एक तरीका GROUP_CONCAT तो आपकी क्वेरी कुछ इस तरह समाप्त हो सकती है।

SELECT 
   posts.*,
   GROUP_CONCAT(cats.id SEPARATOR ',') as catsList,
   GROUP_CONCAT(tags.id SEPARATOR ',') as tagsList
FROM posts
INNER JOIN termRelations ON ( posts.id = termRelations.postId )
LEFT JOIN cats ON ( termRelations.termId = cats.id AND termRelations.termTypeId = 1 AND cats.id =5 )
LEFT JOIN tags ON ( termRelations.termId = tags.id AND termRelations.termTypeId = 0 AND 
   (tags.id =2
   OR tags.id =1)
)
GROUP BY posts.id
LIMIT 0 , 30

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

ps जब आप कहते हैं कि आपके पास सूची बनाने में तेजी लाने के लिए बिल्लियों और टैग के लिए अलग-अलग टेबल हैं, तो आप पाएंगे कि सही ढंग से अनुक्रमित एक तालिका उतनी ही तेज़ होगी और आपके कोड को सरल भी करेगी।




  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 सेट नाम

  3. PHP/MySQL:एडजेंसी लिस्ट मॉडल में सिंगल पाथ को पुनः प्राप्त करें

  4. समान कॉलम नामों के साथ 2 टेबल में आंतरिक शामिल हों

  5. एक MySQL कनेक्शन में एसएसएल का उपयोग करते समय कैसे निर्धारित करें?