$randomvariable=$_GET['randomvariable']; $search="SELECT * from objects WHERE transactiontype='$randomvariable' order by id DESC";
Теперь, если $randomvariable
пуст (ничего), я хотел бы, чтобы он возвращал все строки. В настоящее время, если он пуст, он ничего не возвращает, потому что он в основном не ищет ничего из всех строк.
$randomvariable = ESACPE_MYSQL_STRING($_GET['randomvariable']); $search = "SELECT * FROM objects " . (empty($randomvariable) ? "" : "WHERE transactiontype='$randomvariable' ") . "ORDER BY id DESC";
Где ESCAPE_MYSQL_STRING
– соответствующая функция для экранирования строк для любого используемого вами драйвера MySQL.
Другой, более модульный способ:
$search = array( "select" => "SELECT * FROM objects", "where" => "WHERE transactiontype='$randomvariable'", "order" => "ORDER BY id DESC" ); if (empty($randomvariable)) { unset($search["where"]); } $search = implode(' ', $search);
с$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
Другой подход:
if ($_GET['randomvariable'] != "") { $where = "transactiontype = " . $randomvariable; } else { $where = "1"; } $search = "SELECT * from objects WHERE " . $where . " ORDER BY id DESC";
Здесь есть несколько отличных ответов. У меня есть один для простого решения.
Я иногда сталкиваюсь с этой проблемой, когда мне не нужно предложение WHERE, так как ни одно из моих условий для построения моего предложения WHERE не выполняется. Простой трюк, который мне нравится использовать, примерно такой:
$sql_statement = "SELECT * FROM ".$table_names." WHERE 1 = 1 "; if ($array) { foreach ($array as $key => $value){ $sql_statement .= " AND ".$key." = '".$value."' "; } }
Таким образом, вам не нужна какая-то сложная логика или манипуляция с строкой, потому что 1 всегда равно 1 в вашем предложении WHERE, и вы можете сохранить свою замкнутую строку в том же формате. Вы можете явно расширить эту концепцию, чтобы сделать больше, но для целей этого вопроса этот psuedocode – это просто простой способ достижения цели.
Вы можете использовать оператор IN для указания многих значений для предложения WHERE и включить все возможные значения для параметра transactiontype в качестве параметра по умолчанию.
Разделите его на 2 запроса:
$randomvariable = $_GET['randomvariable']; if($randomvariable) $search="SELECT * from objects WHERE transactiontype='$randomvariable' order by id DESC"; else $search="SELECT * from objects order by id DESC";
Если вам действительно нужно сделать это в SQL, а не на своем языке, вы можете сделать это:
$search="SELECT * from objects WHERE ("" = '$randomvariable' or transactiontype='$randomvariable') order by id DESC";
Однако это не будет работать, и предпочтительнее использовать IF / ELSE на вашем языке.
Добавьте простой оператор if, если $ randomvariable имеет значение null. Если он затем изменит запрос, чтобы вернуть все строки.
Попробуйте как ниже
$randomvariable=mysql_real_escape_string($_GET['randomvariable']); $where = ''; if($randomvariable){ $where .= "WHERE transactiontype='{$randomvariable}'"; } $search="SELECT * from objects ".$where." order by id DESC";