2011-01-10 13 views
5

मुझे mysql में तीन तालिकाओं में शामिल होने में समस्या है।mysql में कई तालिकाओं में एकाधिक से जुड़ने के लिए कैसे छोड़ा जाए?

कहते हैं कि हम एक मेज posts जो मैं इसमें मेरी प्रविष्टियों रखने नामित देता है, मैं एक मेज likes जो मैं user_id की और post_id की दुकान में और एक तिहाई तालिका comments जो मैं इसे में user_id की और post_id की और टिप्पणी के पाठ की दुकान नामित नामित किया है ।

मुझे एक ऐसी क्वेरी की आवश्यकता है जो प्रत्येक प्रविष्टि के लिए पसंद और टिप्पणियों की संख्या के साथ मेरी प्रविष्टियों की सूची लाए। इस क्वेरी का उपयोग

इम:

SELECT posts.id, count(comments.id) as total_comments, count(likes.id) as total_likes 
FROM `posts` 
LEFT OUTER JOIN comments ON comments.post_id = posts.id 
LEFT OUTER JOIN likes ON likes.post_id = posts.id 
GROUP BY posts.id 

लेकिन वहाँ इस क्वेरी के साथ एक समस्या है, अगर टिप्पणियां किसी आइटम के लिए खाली हैं, पसंद करती गिनती बस ठीक है, लेकिन कहते हैं कि एक प्रविष्टि 2 टिप्पणियाँ और 4 है तो देता है पसंद है, कुल_कॉममेंट्स और कुल_लिक्स दोनों "8" होंगे, जिसका अर्थ है कि mysql उन्हें गुणा करता है। मैं उलझन में हूं और मुझे नहीं पता कि मैं क्या कर सकता हूं।

सलाह में धन्यवाद।

उत्तर

7

count(distinct comments.id) और count(distinct likes.id) का उपयोग करें, बशर्ते ये आईडी अद्वितीय हों।

SELECT posts.id, comments.total_comments, likes.total_likes 
FROM `posts` 
LEFT OUTER JOIN (select post_id, count(id) as total_comments from comments) comments 
    ON comments.post_id = posts.id 
LEFT OUTER JOIN (select post_id, count(id) as total_likes from likes) likes 
    ON likes.post_id = posts.id 

तुम भी सहसंबद्ध सबक्वेरी इस्तेमाल कर सकते हैं:

+0

धन्यवाद, एक आकर्षण की तरह काम किया। – Sallar

4

खैर यह एक तरह से यह (यह मानते हुए mysql व्युत्पन्न तालिकाओं की अनुमति देता है) से संपर्क करने के लिए है। जब आप मिलान किए गए रिकॉर्ड नहीं होते हैं तो आप 0 में डालने के लिए केस स्टेटमेंट का खाता लेना चाहते हैं।

के एक सहसंबद्ध सबक्वेरी कोशिश करते हैं:

SELECT posts.id, 
(select count(Id) from comments where post_id = posts.id) as total_comments, 
(select count(Id) from likes where post_id = posts.id) as total_likes 
FROM `posts` 
+0

धन्यवाद, लेकिन इस क्वेरी ने पहले रिकॉर्ड के लिए 12 पसंद और 2 टिप्पणियां लौटा दीं (इसमें 4 पसंद और 2 टिप्पणियां हैं), और अन्य सभी पंक्तियों के लिए न्यूल। – Sallar

+0

लगता है कि सहसंबंधित सबक्वायरी मार्ग सबसे अच्छा हो सकता है – HLGEM

+0

मैंने उनके बारे में कुछ नहीं सुना है। – Sallar

संबंधित मुद्दे