Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak użyć przeciwieństwa BETWEEN w zapytaniu MySQL?

Jedyne, o czym mogę pomyśleć, to to, że wyrażenia definiujące przedział dat zwracają sekcję czasu (te strtotime() wyglądają jak winowajcy). Ta odpowiedź dotyczy dwóch opcji (opcja 2 jest dobra), gdy data zawiera część czasu.

Myślę, że w Twoim konkretnym przypadku byłoby to najlepsze podejście do rozwiązania problemu:

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

Zauważ, że date() funkcja "usuwa" sekcję czasową wartości.

Jeszcze jedno:Twój kod może być podatny na ataki wstrzykujące SQL . Proszę spójrz tutaj za (humorystyczny) przykład tego, co to jest, i wskazówki, jak sobie z tym poradzić.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Normy dotyczące dodawania daty/godziny?

  2. wyświetlaj nazwę miesiąca zamiast numeru miesiąca w mysql

  3. Używanie instrukcji IF w zapytaniu MySQL SELECT

  4. Śledzenie czasu zapytań do bazy danych - Regał/knex

  5. Kolejny błąd UnicodeEncodeError podczas używania metody pandy to_sql z MySQL