Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да използвам противоположното на BETWEEN в MySQL заявка?

Единственото нещо, за което се сещам, е, че по някакъв начин изразите, които дефинират интервала от дата, връщат времева секция (тези strtotime() изглеждат като виновниците). Този отговор работи с две опции (опция 2 е добрата), когато датата включва част от часа.

Във вашия конкретен случай мисля, че това би било най-добрият подход за решаване на проблема:

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

Забележете, че date() функцията "премахва" времевата част на стойността.

Още нещо:Вашият код може да е уязвим към атаки с инжектиране на SQL . Моля, разгледайте тук за (хумористичен) пример за това какво представлява и съвети как да се справите с него.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как използвате командата източник на MySQL за импортиране на големи файлове в Windows

  2. ЗАРЕЖДАНЕ НА ДАННИ INFILE Код на грешка:13

  3. Как да конвертирам колона в ASCII в движение, без да записвам, за да проверя за съвпадения с външен ASCII низ?

  4. Репликация от MySQL към MS SQL

  5. Какво е новото с MySQL репликацията в MySQL 8.0