sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo usar lo contrario de BETWEEN en una consulta MySQL?

Lo único que se me ocurre es que, de alguna manera, las expresiones que definen el intervalo de fechas están devolviendo una sección de tiempo (esas strtotime() parecerse a los culpables). Esta respuesta trata con dos opciones (la opción 2 es la buena) cuando la fecha incluye una parte de tiempo.

En su caso específico, creo que este sería el mejor enfoque para resolver el problema:

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

Observe que date() función "elimina" la sección de tiempo del valor.

Una cosa más:su código puede ser vulnerable a ataques de inyección SQL . Por favor, eche un vistazo aquí para obtener un ejemplo (humorístico) de lo que es y consejos sobre cómo tratarlo.