sql >> Databasteknik >  >> RDS >> Mysql

Hur använder man motsatsen till BETWEEN i en MySQL-fråga?

Det enda jag kan komma på är att uttrycken som definierar datumintervallet på något sätt returnerar ett tidsavsnitt (de där strtotime() ser ut som de skyldiga). Detta svar behandlar två alternativ (alternativ 2 är det bra) när datumet inkluderar en tidsdel.

I ditt specifika fall tror jag att detta skulle vara det bästa sättet att lösa 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))

Lägg märke till att date() funktionen "tar bort" tidsdelen av värdet.

En sak till:Din kod kan vara sårbar för SQL Injection-attacker . Vänligen ta en titt här för ett (humoristiskt) exempel på vad det är, och tips på hur man hanterar det.



  1. Hur kan jag lagra lösenord säkert i MySQL och autentisera till externa tjänster

  2. Återgå till traditionell replikering från GTID

  3. hur man använder kanoniska funktioner i Entity Framework och Mysql

  4. Sök efter sträng i textkolumnen i MySQL