Điều duy nhất tôi có thể nghĩ là, bằng cách nào đó, các biểu thức xác định khoảng ngày đang trả về một phần thời gian (những strtotime()
giống như thủ phạm). Câu trả lời này
giao dịch với hai tùy chọn (tùy chọn 2 là tùy chọn tốt) khi ngày bao gồm một phần thời gian.
Trong trường hợp cụ thể của bạn, tôi nghĩ đây sẽ là cách tiếp cận tốt nhất để giải quyết vấn đề:
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))
Lưu ý rằng date()
hàm "loại bỏ" phần thời gian của giá trị.
Một điều nữa:Mã của bạn có thể dễ bị tấn công SQL Injection . Vui lòng hãy xem ở đây cho một ví dụ (hài hước) về vấn đề đó là gì và mẹo về cách đối phó với nó.