Het enige dat ik kan bedenken is dat de uitdrukkingen die het datum-interval definiëren op de een of andere manier een tijdsectie retourneren (die strtotime()
lijken op de boosdoeners). Dit antwoord
behandelt twee opties (optie 2 is de goede) wanneer de datum een tijdsdeel bevat.
In jouw specifieke geval denk ik dat dit de beste aanpak is om het probleem op te lossen:
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))
Merk op dat de date()
functie "verwijdert" het tijdgedeelte van de waarde.
Nog één ding:uw code kan kwetsbaar zijn voor SQL Injection-aanvallen . Neem kijk hier eens voor een (humoristisch) voorbeeld van wat het is, en tips hoe ermee om te gaan.