Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment utiliser l'opposé de BETWEEN dans une requête MySQL ?

La seule chose à laquelle je peux penser est que, d'une manière ou d'une autre, les expressions qui définissent l'intervalle de dates renvoient une section de temps (ceux strtotime() ressemblent aux coupables). Cette réponse traite de deux options (l'option 2 est la bonne) lorsque la date comprend une partie horaire.

Dans votre cas spécifique, je pense que ce serait la meilleure approche pour résoudre le problème :

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

Notez que le date() la fonction "supprime" la section horaire de la valeur.

Une dernière chose :votre code peut être vulnérable aux attaques par injection SQL . Veuillez jeter un œil ici pour un exemple (humoristique) sur ce que c'est, et des conseils sur la façon de le gérer.