Единственото нещо, за което се сещам, е, че по някакъв начин изразите, които дефинират интервала от дата, връщат времева секция (тези 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 . Моля, разгледайте тук за (хумористичен) пример за това какво представлява и съвети как да се справите с него.