sql >> Database >  >> RDS >> Mysql

Hoe het tegenovergestelde van BETWEEN te gebruiken in een MySQL-query?

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.



  1. Niet-vastleggende groepen gebruiken in MySQL REGEXP

  2. Hoe timeofday() werkt in PostgreSQL

  3. MySQL CASE om meerdere kolommen bij te werken

  4. Sla nieuwe positie van RecyclerView-items op in SQLite nadat ze zijn gesleept en neergezet