В настоящее время я пытаюсь написать сложные предложения MySQL WHERE, которые генерируются из переменных $ _GET (которые сами поступают из выпадающих списков выбора). Во-первых, немного кода, чтобы вы понимали, о чем я говорю:
if(!isset($_GET['order'])){
$order= 'start asc';
} elseif ($_GET['order'] == "dateasc") {
$order= 'start asc';
} elseif ($_GET['order'] == "titleasc") {
$order= 'title asc';
} elseif ($_GET['order'] == "titledesc") {
$order= 'title desc';
};
if(!isset($_GET['cat'])){
$cat= '0';
} else {
$cat = $_GET['cat'];
};
if(!isset($_GET['loc'])){
$loc= '0';
} else {
$loc = $_GET['loc'];
};
if (isset($_GET['sd']) || isset($_GET['ed']) || isset($_GET['cat']) || isset($_GET['loc']) || isset($_GET['order']) ) {
$where = 'WHERE ';
if (isset($_GET['sd'])) {
$where .= "start = " . $_GET['sd'];
};
if (isset($_GET['ed'])) {
$where .= "AND end = " . $_GET['ed'];
};
if (isset($_GET['cat'])) {
$where .= "AND category = " . $_GET['cat'];
};
if (isset($_GET['loc'])) {
$where .= "AND location = " . $_GET['loc'];
};
};
$result = mysql_query("SELECT * FROM " . TABLE . $where . " ORDER BY " . $order);
Очевидно, это не работает, иначе меня бы здесь не было. :) По сути, у меня есть 4 переменные, которые я хочу условно использовать для сортировки в моем запросе: дата начала и дата окончания, категория и местоположение. Моя проблема в том, что все 4 из них не всегда могут использоваться ... поэтому, учитывая приведенный выше пример, может быть случай, когда кто-то выберет категорию ($ cat), но НЕ дату начала ($ sd) ... что означает мой Предложение WHERE должно начинаться с 'AND', что, очевидно, недопустимо. Итак, как мне создать запрос на основе переменных, которые могут или не могут использоваться?
Мне кажется, что я слишком много над этим думаю, и я боюсь писать 9000 строк тестов isset для учета каждой комбинации использования переменной $ _GET. Несомненно, существует простой способ создать предложение WHERE из нескольких $ _GET, которые могут или не могут использоваться каждый раз ..? Я пробовал поискать в Google, но могу найти только решения, предлагающие использовать фреймворк для построения сложных запросов, и это кажется слишком ... неуклюжим ... для такой простой проблемы.
implode()
ваш массив, используя AND в качестве клея. - person andrewsi   schedule 12.09.2013mysql_query
не следует использовать в новых приложениях. Это устаревший интерфейс, который будет удален из будущих версий PHP. Современная замена, например PDO несложно выучить и упростит разработку кода базы данных. - person tadman   schedule 12.09.2013