mysql - COUNT()INNER / LEFT के साथ मिलकर काम नहीं कर रहा है




mysqli (2)

मैं एक mysql क्वेरी के साथ अटक गया हूं जो मेरे खराब स्तर के लिए बहुत जटिल प्रतीत होता है इस मुद्दे को हल करने के लिए कोई मदद अत्यधिक सराहना की जाएगी।

मेरे पास 3 टेबल हैं:
_ सदस्य: सभी सदस्यों की सूची
_ मित्र: प्रत्येक सदस्य के सभी दोस्तों की सूची, 2 क्षेत्रों का उपयोग कर रहे हैं: friends.id_member में सदस्य आईडी है और दोस्तों.आईआई_ मित्र में संबंधित मित्र का आईडी है।
_ टिप्पणियाँ: सदस्यों द्वारा पोस्ट की गई सभी टिप्पणियों की सूची (तालिका टिप्पणियों के लिए इस तालिका में शामिल होने के लिए फ़ील्ड comments.id_member का उपयोग करके)

मैं पसंद करूँगा:
_ (1): एक सदस्य हो सकता है सभी दोस्तों को प्रदर्शित करने के लिए (इस उदाहरण में सदस्य संख्या 35, यह अच्छी तरह से काम करता है)

    SELECT friends.*, members.*
    FROM friends 
    INNER JOIN members ON friends.id_friend=members.id 
    WHERE friends.id_member='35'

_ (2): उसी mysql क्वेरी का उपयोग करके, अपने सभी दोस्तों के टिप्पणियों की संख्या को प्राप्त कर सकते हैं (सभी मित्रों ने टिप्पणी पोस्ट नहीं की है और यहां मेरी समस्या है)। मैंने यह कोशिश की है:

    SELECT friends.*, members.*,
    COUNT(comments.id_member) AS nb_comments
    FROM friends 
    INNER JOIN members ON friends.id_friend=members.id 
    INNER JOIN comments ON comments.id_member=members.id 
    WHERE friends.id_member='35'

-> मुझे केवल दोस्त मिलते हैं जिन्होंने टिप्पणियां पोस्ट की थीं (कोई टिप्पणी पोस्ट नहीं की गई दोस्त, जो यहां होनी चाहिए, इस क्वेरी से अनदेखा कर दी जाती है), और मुझे मिलती हुई टिप्पणियों (एनबी_मेंमेंट्स) की संख्या गलत है। एक और बग; प्रश्नों की वापसी 1 पंक्ति के मामले में सदस्य का कोई भी दोस्त नहीं है।

nb: एक टिप्पणी छोड़ दो 'comments.id_member = members.id पर कुछ भी शामिल हों' कुछ भी हल नहीं करता है


Answers

एक ऐसा तरीका जो मुझे लगता है कि आप चाहते हैं कि एक subquery का उपयोग करना है:

SELECT f.*, m.*,
       (SELECT COUNT(*)
        FROM comments c
        WHERE c.id_member = m.id
       ) as nb_comments
FROM friends f INNER JOIN
     members m
     ON f.id_friend = m.id 
WHERE f.id_member = 35;

जब आप SELECT COUNT() जोड़ते हैं, तो आप क्वेरी को एकत्रीकरण क्वेरी में बदल देते हैं। एक GROUP BY बिना एक पंक्ति के ठीक उसी पंक्ति से लौटा दिया जाता है

टिप्पणियाँ:

  • तालिका उपनामों का उपयोग क्वेरी को सरल करता है, जिससे यह लिखना और पढ़ना आसान हो जाता है।
  • एक संख्यात्मक स्थिरांक के आसपास एकल उद्धरणों का उपयोग नहीं किया जाना चाहिए मुझे लगता है id_member एक संख्या के रूप में घोषित किया गया है।
  • सहसंबद्ध subquery प्रत्येक पंक्ति पर गिनती जोड़ देगा
  • आपको अपने इच्छित कॉलम को स्पष्ट रूप से सूचीबद्ध करने की आदत में आना चाहिए। यदि दो तालिकाओं में एक ही नाम के कॉलम हैं तो आपको अप्रत्याशित परिणाम मिल सकते हैं।

SELECT * 
FROM 
    PersonAddress a, 
    Person b,
    PersonAdmin c
WHERE a.addressid LIKE '97%' 
    AND b.lastname LIKE 'test%'
    AND b.genderid IS NOT NULL
    AND a.partyid = c.partyid 
    AND b.partyid = c.partyid;




mysql sql mysqli