Jediná věc, která mě napadá, je, že výrazy, které definují interval data, nějak vracejí časový úsek (tyto strtotime()
vypadat jako viníci). Tato odpověď
se zabývá dvěma možnostmi (možnost 2 je dobrá), když datum zahrnuje časovou část.
Ve vašem konkrétním případě si myslím, že by to byl nejlepší přístup k vyřešení problému:
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))
Všimněte si, že date()
funkce "odstraní" časovou část hodnoty.
Ještě jedna věc:Váš kód může být zranitelný vůči útokům SQL Injection . Prosím podívejte se sem pro (vtipný) příklad toho, co to je, a tipy, jak se s tím vypořádat.