sql >> Databasteknik >  >> RDS >> Mysql

När mysql WHERE-satsen är tom, returnera alla rader

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

Där ESCAPE_MYSQL_STRING är den relevanta funktionen för att escape-strängar för vilken MySQL-drivrutin du än använder.

Ett annat, mer modulärt sätt:

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

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

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

Det fina med detta är att du enkelt kan lägga till, ta bort eller ändra frågan för alla situationer, och ha enkel åtkomst till vilken del av frågan som helst.

Du kan också göra detta med CASE() i SQL, men det är lite besvärligt och du bör inte förvänta dig bra prestanda heller:

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


  1. PL/SQL-bulksamla med LIMIT-klausul i Oracle-databasen

  2. Hur kör man råfrågor med Laravel 5.1?

  3. Hur man delar upp en resulterande kolumn i flera kolumner

  4. Hur får man djup i mysql-butiksprocedurrekursionen?