एक टेबल है जहां चालान के लिए भुगतान डेटा दर्ज किया जाता है। मैं चालान की कुल भुगतान राशि की गणना करने के लिए एसयूएम का उपयोग कर रहा हूं। मैं केवल उन चालानों को दिखाना चाहता हूं जिनका भुगतान नहीं किया गया है। इसलिए मैंने GROUP BY का उपयोग करके WHERE क्लॉज बनाया और केवल उन रिकॉर्ड्स को दिखाने के लिए जिनमें कुल चालान राशि से कम के रिकॉर्ड हैं।
लेकिन...यदि भुगतान तालिका में खोजने के लिए कोई रिकॉर्ड नहीं हैं, तो सिस्टम प्रदर्शित करने के लिए कोई चालान नहीं ढूंढ सकता है। क्या किसी और का भी यही मसला था? मैं एक अलग प्रारूप में बदलने के लिए तैयार हूं, लेकिन मुझे इसे उसी तरह से कार्य करने की आवश्यकता है जहां इसे केवल कुल चालान राशि से कम भुगतान राशि वाले चालान मिलते हैं या कोई भुगतान नहीं होता है।
$query = "
SELECT o.id, o.user_id,o.invoice_number,o.total,SUM(p.payment_amount) as paid
FROM User_Order_Details as o
LEFT JOIN User_Payments as p ON (p.user_id = o.user_id AND p.order_id = o.id)
WHERE o.user_id = '1' AND o.invoice_number != ''
GROUP BY p.order_id
HAVING SUM(p.payment_amount) < o.total
ORDER BY o.ship_date DESC
");
1 उत्तर
आपकी समस्या यह है कि जब कोई भुगतान नहीं किया गया है, तो SUM(p.payment_amount)
NULL
है, और NULL
की तुलना किसी भी चीज़ से करने पर हमेशा FALSE
(इसलिए HAVING SUM(p.payment_amount) < o.total
का परिणाम नहीं होता है। उन पंक्तियों को वापस करें)। तो आपको उस मान को 0
में बदलने के लिए COALESCE
का उपयोग करने की आवश्यकता है, जिसकी तब सफलतापूर्वक तुलना की जा सकती है। ध्यान दें कि MySQL आपको HAVING
क्लॉज में उपनामों का उपयोग करने की अनुमति देता है, इसलिए आप वहां केवल paid
का उपयोग कर सकते हैं:
$query = "
SELECT o.id, o.user_id,o.invoice_number,o.total, COALESCE(SUM(p.payment_amount),0) as paid
FROM User_Order_Details as o
LEFT JOIN User_Payments as p ON (p.user_id = o.user_id AND p.order_id = o.id)
WHERE o.user_id = '1' AND o.invoice_number != ''
GROUP BY p.order_id
HAVING paid < o.total
ORDER BY o.ship_date DESC
");
संबंधित सवाल
नए सवाल
mysql
MySQL एक फ्री, ओपन सोर्स रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है जो स्ट्रक्चर्ड क्वेरी लैंग्वेज (SQL) का उपयोग करता है। इस टैग को अन्य DBs जैसे SQL Server, SQLite आदि के लिए उपयोग न करें। वे विभिन्न DB हैं जो सभी डेटा का प्रबंधन करने के लिए SQL की अपनी बोलियों का उपयोग करते हैं।