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

मैसकल नेस्टेड चयन

मैंने पिछले प्रश्न का उत्तर जोड़ा है, कृपया समझने के लिए कृपया उसे पहले देखें।

आप इसे bb_ratings . से प्राप्त नहीं कर सकते अकेले इसे ग्रुप करके और हैक करके। आप नल प्राप्त करते हैं क्योंकि आप ग्रिड के संदर्भ में सोच रहे हैं, रिलेशनल सेट नहीं (यह रिलेशनल मॉडल की केंद्रीय अवधारणा है)।

  1. इससे पहले कि आप यह तय करें कि आपकी क्वेरी को पूरा करने के लिए किस टेबल पर जाना है, आपको यह तय करना होगा कि आप अपने परिणाम सेट की संरचना के लिए क्या चाहते हैं।

  2. फिर इसे (कौन सी पंक्तियाँ) WHERE . के साथ सीमित करें खंड।

  3. फिर पता लगाएं कि कॉलम कहां से (कौन सी टेबल) प्राप्त करें। या तो अधिक तालिकाओं में शामिल हों, और WHERE . पर अधिक काम करें खंड; या अदिश उपश्रेणियाँ, बाहरी क्वेरी से संबंधित हैं।

आप जो चाहते हैं उसके बारे में आप स्पष्ट नहीं हैं। ऐसा लगता है कि आप पिछले प्रश्न की तरह ही रिपोर्ट चाहते हैं, साथ ही दिए गए उपयोगकर्ताओं के वोट के लिए एक कॉलम भी चाहते हैं। मेरे लिए, आपके परिणाम सेट की संरचना बुलेटिन की एक सूची है। खैर, मैं इसे bulletin . से प्राप्त कर सकता हूं , bulletin_like . पर जाने की आवश्यकता नहीं है और फिर उसे ग्रुप करना होगा।

यदि आप सेट के संदर्भ में सोचते हैं, तो यह बहुत आसान है, भौतिक विचारों या "नेस्टेड" प्रश्नों के साथ हुप्स के माध्यम से कूदने की आवश्यकता नहीं है:

SELECT name AS bulletin, 
    (SELECT COUNT(like) 
        FROM  bulletin_like bl 
        WHERE bl.bulletin_id = b.bulletin_id 
        AND   like = 1
        ) AS like,
    (SELECT COUNT(like) 
        FROM  bulletin_like bl 
        WHERE bl.bulletin_id = b.bulletin_id 
        AND   like = 0
        ) AS dislike,
    (SELECT COUNT(like) 
        FROM  bulletin_like bl 
        WHERE bl.bulletin_id = b.bulletin_id 
        AND   bl.user_id = {$user_d}
        AND   like = 1
        ) AS your_vote
    FROM bulletin b

टिप्पणियों के प्रतिसाद

मुझे लगता है कि आप जो कह रहे हैं वह मेरे SQL के दृष्टिकोण के लिए बहुत महत्वपूर्ण है

  1. हाँ बिल्कुल। अगर आप पहले से ही सही चीजें सीखने के इच्छुक हैं, तो यह होगा:

    • आपको बाद में सभी प्रकार की समस्याओं से बचाता है
    • अपने प्रश्नों को अधिक कुशल बनाएं
    • आपको तेज़ी से कोड करने की अनुमति देता है
  2. अभी के लिए, परिणाम सेट को टेबल (बहुत धीमी), और अस्थायी तालिकाओं के रूप में उपयोग करने के बारे में भूल जाओ (निश्चित रूप से आवश्यक नहीं है यदि आपका डेटाबेस सामान्यीकृत है)। आप बहुत हैं सीधे टेबल से पूछताछ करना बेहतर है। आपको विभिन्न विषयों को सीखने की जरूरत है जैसे कि संबंधपरक मॉडल; एसक्यूएल का उपयोग कैसे करें; कैसे नहीं SQL का उपयोग करने के लिए ताकि समस्याओं से बचा जा सके; आदि। मैं आपकी मदद करने के लिए तैयार हूं, और कुछ समय के लिए आपके साथ रहूंगा, लेकिन मुझे यह जानने की जरूरत है कि आप तैयार हैं। आगे-पीछे करने में थोड़ा समय लगेगा। इस साइट पर थोड़ा शोर है, इसलिए मैं अन्य टिप्पणियों (अंत तक) को अनदेखा कर दूंगा और केवल आपकी प्रतिक्रिया का जवाब दूंगा।

    • GROUP BY का उपयोग करना बंद करें , यह गंभीरता से SQL की आपकी समझ में बाधा डाल रहा है। यदि आपको GROUP BY . का उपयोग किए बिना वांछित रिपोर्ट नहीं मिल पाती है , एक प्रश्न पूछें।
  3. यह पोस्ट किया गया प्रश्न। मुझे बताएं कि आप किस बिंदु पर खो गए हैं, और मैं उस बिंदु से आगे और अधिक विवरण प्रदान करूंगा।

    • इस प्रश्न के लिए, आप पसंद के साथ बुलेटिनों की एक सूची चाहते हैं; नापसंद; और यह उपयोगकर्ताओं को पसंद है। क्या वो सही है ? क्या आपने मेरे द्वारा प्रदान किए गए कोड को आजमाया है?
      .
  4. लिंक किए गए प्रश्न को देखा। यह एक गड़बड़ है, और किसी ने भी गहरी समस्या का समाधान नहीं किया है; उन्होंने सतह पर समस्या का उत्तर एकांत में दिया है। अब आपके पास एक उत्तर है लेकिन आप इसे नहीं समझते हैं। यह प्रगति का बहुत धीमा तरीका है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विशिष्ट तिथियों पर sql/PHP के साथ दो अलग-अलग पंक्तियों/स्तंभों में दो संख्याओं के औसत, विचरण और मानक विचलन की गणना करें

  2. MySQL का डिफ़ॉल्ट संयोजन latin1_swedish_ci क्यों है?

  3. पेज को रिफ्रेश किए बिना PHP और AJAX के साथ MySQL को कैसे अपडेट करें?

  4. mysqli और php . का उपयोग करने में कॉलम का योग

  5. MySQL ग्रुप बाय का उपयोग करते समय गैर मेल खाने वाले कॉलम को शून्य मान कैसे असाइन करें?