sql >> データベース >  >> RDS >> Mysql

MySQLクエリでBETWEENの反対を使用するにはどうすればよいですか?

    私が考えることができる唯一のことは、どういうわけか、日付間隔を定義する式が時間セクションを返しているということです(それらのstrtotime() 犯人のように見えます)。 この回答 日付に時間部分が含まれている場合は、2つのオプション(オプション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()に注意してください 関数は、値の時間セクションを「削除」します。

    もう1つ:コードはSQLインジェクション攻撃に対して脆弱である可能性があります 。 こちらをご覧ください それが何であるかについての(ユーモラスな)例と、それに対処するためのヒントについては。



    1. Node.jsはMySQL8.0に対して認証できません

    2. AndroidでSqLiteデータベースをリセットする方法は?

    3. PostgreSQLのGROUPBYとCOUNT

    4. テーブルがすでに存在する場合、CREATE TABLE IFNOTEXISTSが失敗する