आपकी समस्या यह है कि, आपकी क्वेरी वह नहीं लौटा रही है जो आपको लगता है कि वह देता है (यह हमेशा आपको क्वेरी स्टैंडअलोन चलाने में मदद करता है, यह देखने के लिए कि क्या परिणाम सेट आपकी अपेक्षा के अनुरूप है)।
ठीक है, आइए इसे तोड़ते हैं।
आप उन सभी पोस्ट को गिनने का प्रयास कर रहे हैं जो नहीं उस उपयोगकर्ता आईडी के लिए टैक्सी तालिका में एक मिलान रिकॉर्ड है। आप यहां क्या चाहते हैं 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