Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verwendet man das Gegenteil von BETWEEN in einer MySQL-Abfrage?

Das einzige, was mir einfällt, ist, dass die Ausdrücke, die das Datumsintervall definieren, irgendwie einen Zeitabschnitt zurückgeben (diese strtotime() sehen aus wie die Übeltäter). Diese Antwort befasst sich mit zwei Optionen (Option 2 ist die gute), wenn das Datum einen Zeitteil enthält.

In Ihrem speziellen Fall wäre dies meiner Meinung nach der beste Ansatz zur Lösung des Problems:

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))

Beachten Sie, dass das date() Funktion "entfernt" den Zeitabschnitt aus dem Wert.

Noch etwas:Ihr Code ist möglicherweise anfällig für SQL-Injection-Angriffe . Bitte schau mal hier für ein (humorvolles) Beispiel, was es ist, und Tipps, wie man damit umgeht.