Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Gdy klauzula mysql WHERE jest pusta, zwróć wszystkie wiersze

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

Gdzie ESCAPE_MYSQL_STRING jest odpowiednią funkcją do ucieczki ciągów dla dowolnego używanego sterownika MySQL.

Inny, bardziej modułowy sposób:

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

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

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

Zaletą tego jest to, że możesz łatwo dodawać, usuwać lub zmieniać zapytanie w dowolnej sytuacji, mając łatwy dostęp do dowolnej części zapytania.

Możesz to również zrobić za pomocą CASE() w SQL, ale jest to trochę kłopotliwe i nie należy też oczekiwać dobrej wydajności:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy powinienem używać PDO PARAM_LOB lub PARAM_STR dla typu MySQL TEXT?

  2. Zapytanie o liczbę elementów drzewa

  3. Rodzic / Dziecko w tym samym stole

  4. Czy możliwe jest przekazanie tabel NEW i STARY z wyzwalacza do procedury w MySQL?

  5. MySQL - pasujące i niepasujące wyniki w zapytaniu Where IN