sql >> Database teknologi >  >> RDS >> Mysql

Hvordan bruger man det modsatte af BETWEEN i en MySQL-forespørgsel?

Det eneste jeg kan komme i tanke om er, at de udtryk, der definerer datointervallet på en eller anden måde, returnerer en tidssektion (de strtotime() ligne de skyldige). Dette svar omhandler to muligheder (mulighed 2 er den gode), når datoen inkluderer en tidsdel.

I dit specifikke tilfælde tror jeg, at dette ville være den bedste tilgang til at løse 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))

Bemærk, at date() funktionen "fjerner" tidsdelen af ​​værdien.

En ting mere:Din kode kan være sårbar over for SQL Injection-angreb . tag et kig her for et (humoristisk) eksempel på, hvad det er, og tips til, hvordan man håndterer det.



  1. operand skal indeholde 1 kolonne

  2. Masseindsæt datafiler i SQL Server

  3. Sender HTML-kode gennem JSON

  4. Hvordan kører man et php-script automatisk dagligt?