Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar o oposto de BETWEEN em uma consulta MySQL?


A única coisa que consigo pensar é que, de alguma forma, as expressões que definem o intervalo de datas estão retornando uma seção de tempo (aquelas strtotime() parecem os culpados). Esta resposta lida com duas opções (a opção 2 é a boa) quando a data inclui uma parte do tempo.

No seu caso específico, acho que essa seria a melhor abordagem para resolver o 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 o date() função "remove" a seção de tempo do valor.

Mais uma coisa:seu código pode estar vulnerável a ataques de injeção de SQL . Por favor, dê uma olhada aqui para um exemplo (humorístico) sobre o que é e dicas sobre como lidar com isso.