sql >> Databáze >  >> RDS >> Mysql

Jak použít opak BETWEEN v dotazu MySQL?

Jediná věc, která mě napadá, je, že výrazy, které definují interval data, nějak vracejí časový úsek (tyto strtotime() vypadat jako viníci). Tato odpověď se zabývá dvěma možnostmi (možnost 2 je dobrá), když datum zahrnuje časovou část.

Ve vašem konkrétním případě si myslím, že by to byl nejlepší přístup k vyřešení problému:

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

Všimněte si, že date() funkce "odstraní" časovou část hodnoty.

Ještě jedna věc:Váš kód může být zranitelný vůči útokům SQL Injection . Prosím podívejte se sem pro (vtipný) příklad toho, co to je, a tipy, jak se s tím vypořádat.



  1. Co je jedinečné omezení v SQL Server - SQL Server / TSQL výukový program, část 95

  2. Export databáze pomocí MySQL Workbench s příkazy INSERT

  3. BatchUpdateException:dávka nebude ukončena

  4. Použití utf8mb4 s php a mysql