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

mysql WHERE句が空の場合、すべての行を返します

    $randomvariable = ESACPE_MYSQL_STRING($_GET['randomvariable']);
    $search =
        "SELECT * FROM objects " .
        (empty($randomvariable) ? "" : "WHERE transactiontype='$randomvariable' ") .
        "ORDER BY id DESC";
    

    ここで、 ESCAPE_MYSQL_STRING は、使用しているMySQLドライバーの文字列をエスケープするための関連関数です。

    もう1つの、よりモジュール化された方法:

    $search = array(
        "select" => "SELECT * FROM objects",
        "where" => "WHERE transactiontype='$randomvariable'",
        "order" => "ORDER BY id DESC"
    );
    
    if (empty($randomvariable)) {
        unset($search["where"]);
    }
    
    $search = implode(' ', $search);
    

    これの良いところは、クエリの任意の部分に簡単にアクセスできるため、どのような状況でもクエリを簡単に追加、削除、または変更できることです。

    これは、 CASE()> SQLでは、しかしそれはやや面倒であり、あなたも良いパフォーマンスを期待するべきではありません:

    SELECT * FROM objects
    WHERE transactiontype LIKE
        CASE WHEN '$randomvariable' = '' THEN
            '%'
        ELSE
            '$randomvariable'
        END CASE
    ORDER BY id DESC
    


    1. MySQL RADIANS()関数–度からラジアンに変換

    2. MySQLクイックヒント:DROPUSERコマンドの使用

    3. SQL Serverの内部:PlanCachingPt。 II –計画の再コンパイル

    4. ストアドプロシージャとアクセス許可-EXECUTEで十分ですか?