केवल एक चीज जो मैं सोच सकता हूं, वह यह है कि, किसी भी तरह, दिनांक अंतराल को परिभाषित करने वाले भाव एक समय खंड (वे strtotime()
लौटा रहे हैं। अपराधियों की तरह देखो)। यह जवाब
दो विकल्पों के साथ डील करता है (विकल्प 2 अच्छा है) जब तारीख में एक समय भाग शामिल होता है।
आपके विशिष्ट मामले में, मुझे लगता है कि इस मुद्दे को हल करने का यह सबसे अच्छा तरीका होगा:
SELECT loanac.id, loanac.name, loanac.lacc, loanac.phone
, SUM(loantrans.in) as totalin, SUM(loantrans.out) as totalout
FROM loanac
INNER JOIN loantrans on loanac.lacc = loantrans.account
-- Instead of an implicit join in the WHERE clause, use an explicit INNER JOIN
WHERE date(loantrans.date) < date('$range')
AND date(loantrans.date) > date('$date')
GROUP BY loanac.lacc
HAVING SUM(IFNULL(`loantrans`.`out`,0)) > SUM(IFNULL(`loantrans`.`in`,0))
ध्यान दें कि date()
फ़ंक्शन मान के समय खंड को "हटा" देता है।
एक और बात:आपका कोड SQL इंजेक्शन हमलों की चपेट में आ सकता है . कृपया यहां एक नज़र डालें एक (हास्यपूर्ण) उदाहरण के लिए कि यह क्या है, और इससे निपटने के तरीके के बारे में सुझाव।