Det eneste jeg kan komme i tanke om er, at de udtryk, der definerer datointervallet på en eller anden måde, returnerer en tidssektion (de strtotime()
ligne de skyldige). Dette svar
omhandler to muligheder (mulighed 2 er den gode), når datoen inkluderer en tidsdel.
I dit specifikke tilfælde tror jeg, at dette ville være den bedste tilgang til at løse problemet:
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))
Bemærk, at date()
funktionen "fjerner" tidsdelen af værdien.
En ting mere:Din kode kan være sårbar over for SQL Injection-angreb . tag et kig her for et (humoristisk) eksempel på, hvad det er, og tips til, hvordan man håndterer det.