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

Come utilizzare l'opposto di BETWEEN in una query MySQL?

L'unica cosa che mi viene in mente è che, in qualche modo, le espressioni che definiscono l'intervallo di date restituiscono una sezione temporale (quelle strtotime() sembrano i colpevoli). Questa risposta si occupa di due opzioni (l'opzione 2 è quella buona) quando la data include una parte temporale.

Nel tuo caso specifico, penso che questo sarebbe l'approccio migliore per risolvere il 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))

Si noti che il date() la funzione "rimuove" la sezione temporale del valore.

Un'altra cosa:il tuo codice potrebbe essere vulnerabile agli attacchi SQL injection . Per favore dai un'occhiata qui per un esempio (umoristico) di cosa si tratta e consigli su come affrontarlo.