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

Když je klauzule mysql WHERE prázdná, vrátí všechny řádky

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

Kde ESCAPE_MYSQL_STRING je relevantní funkce pro escapování řetězců pro jakýkoli ovladač MySQL, který používáte.

Další, modulárnější způsob:

$search = array(
    "select" => "SELECT * FROM objects",
    "where" => "WHERE transactiontype='$randomvariable'",
    "order" => "ORDER BY id DESC"
);

if (empty($randomvariable)) {
    unset($search["where"]);
}

$search = implode(' ', $search);

Pěkné na tom je, že můžete snadno přidat, odebrat nebo upravit dotaz pro jakoukoli situaci a mít snadný přístup k jakékoli části dotazu.

Můžete to udělat také pomocí CASE() v SQL, ale je to poněkud těžkopádné a také byste neměli očekávat dobrý výkon:

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


  1. MySQL získá konverzaci mezi dvěma uživateli

  2. Který z nich je rychlejší:korelované poddotazy nebo spojení?

  3. Jak vypočítat rozdíl mezi dvěma časovými razítky v SQLite

  4. Uživatel schématu Oracle nemůže vytvořit tabulku v proceduře