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

MySQL जटिल क्वेरी परिणामों की गणना करता है?

आपकी समस्या यह है कि, आपकी क्वेरी वह नहीं लौटा रही है जो आपको लगता है कि वह देता है (यह हमेशा आपको क्वेरी स्टैंडअलोन चलाने में मदद करता है, यह देखने के लिए कि क्या परिणाम सेट आपकी अपेक्षा के अनुरूप है)।

ठीक है, आइए इसे तोड़ते हैं।

आप उन सभी पोस्ट को गिनने का प्रयास कर रहे हैं जो नहीं उस उपयोगकर्ता आईडी के लिए टैक्सी तालिका में एक मिलान रिकॉर्ड है। आप यहां क्या चाहते हैं JOIN टेबल और उन पंक्तियों को post . में प्राप्त करें जिसे आम तौर पर शामिल होने से बाहर रखा जाएगा। यह एक बाएं बाहरी जुड़ाव द्वारा प्राप्त किया जाता है

(संपादित )

SELECT p.ID, t.taxiID
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL

वह HAVING क्लॉज कह रहा है:परिणामसेट में केवल वे पंक्तियाँ जिनमें संबंधित t.taxiID नहीं था।

यदि आप इस क्वेरी को चलाते हैं और पंक्तियों का अपेक्षित सेट प्राप्त करते हैं (ऐसी पोस्ट जिन्हें उस उपयोगकर्ता द्वारा पसंद या नापसंद नहीं है) तो आप लौटाई गई पंक्तियों की संख्या की गणना करने के लिए एक बाहरी क्वेरी जोड़ सकते हैं:

SELECT COUNT(*) as count FROM (
    SELECT p.ID, t.taxiID
    FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
    HAVING t.taxiID IS NULL
) a

इसे गिनती नामक एक स्केलर वापस करना चाहिए। इस मामले में आप यह कह सकेंगे:

if ($count[0]->count > 10) { blah blah blah }

(दूसरा संपादन ) यह आंतरिक क्वेरी आपको वे पोस्ट प्राप्त करेगी जिनका या तो टैक्सी टेबल में मान =1 है, या बिल्कुल भी कोई मूल्य नहीं है, जिसके परिणामस्वरूप आपके उदाहरण के लिए 4 लौटाए जा रहे हैं:

SELECT p.ID, t.taxiID, t.value
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL OR t.value = 1


  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 ISNULL () समझाया गया

  2. MySQL में टेबल इंजन बदलना

  3. mysql jdbc ड्राइवर कई कथनों के साथ ट्रिगर में सीमांकक का समर्थन नहीं करता है

  4. कमांड लाइन पर विदेशी कुंजी जांच अक्षम करना

  5. mysqlimport:त्रुटि:1045, प्रवेश निषेध