Satu-satunya hal yang dapat saya pikirkan adalah, entah bagaimana, ekspresi yang menentukan interval tanggal mengembalikan bagian waktu (strtotime()
itu terlihat seperti pelakunya). Jawaban ini
berurusan dengan dua opsi (opsi 2 adalah yang terbaik) ketika tanggal menyertakan bagian waktu.
Dalam kasus khusus Anda, saya pikir ini akan menjadi pendekatan terbaik untuk menyelesaikan masalah:
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))
Perhatikan bahwa date()
fungsi "menghapus" bagian waktu dari nilai.
Satu hal lagi:Kode Anda mungkin rentan terhadap serangan SQL Injection . Silakan lihat di sini untuk contoh (lucu) tentang apa itu, dan tips tentang cara menghadapinya.