Mysql критерий запроса - PullRequest
0 голосов
/ 03 мая 2011

Есть вопрос.Если я делаю запрос к серверу, я использую что-то вроде этого:

 mysql_query("select * FROM test WHERE car = '$car'); 

Если я делаю запрос к серверу и использую два критерия, я использую что-то вроде этого:

mysql_query("select * FROM test WHERE car = '$car' and color ='$color'); 

Если я использую ANDВсе критерии должны быть заполнены.Но иногда я не знаю второй критерий, и он не будет работать.Я мог бы использовать ИЛИ, но тогда, если я знаю оба критерия, он не даст мне точных данных.

Так что мне нужно сделать некоторую переменную между car = '$ car' (variable) color = '$ color' ииспользуйте оператор If.Примерно так: если car = 'all', то variable = OR.Поэтому, когда я не знаю критерий автомобиля, я оставляю его «Все», и я знаю критерий цвета и выбираю его «Синий», тогда отображаются все автомобили синего цвета.«Все», как и все критерии.

Любая ссылка или советы для такого рода вещи помогут

Спасибо

Надеюсь, это поможет вам понять, что я пытаюсь сделать.

Есть база данных, где находятся данные об автомобилях.Цвет столбца, где находятся цвета автомобиля.Тип колонки, где купе, внедорожник, седан.Топливная колонка, где бензин, дизель, кремневый камень.

Для отображения данных я сделал форму в html, которая получила 3 ​​выпадающих списка и кнопку отправки

  1. Color-all, синий, зеленый, красный.
  2. Тип - все, купе, внедорожник, седан.
  3. Топливо - все, бензин, дизель, кремень.

Теперь, когда я выбираю

1.цвет- синий.2. Тип - все.3.fuel- all.

показаны все автомобили синего цвета, не имеет значения, внедорожник, купе, дизель и т. Д. (Пример флинстоуна)

, нокогда я выбираю

1.color- blue 2.type- coupe 3.fuel- all

и отправляю

, тогда будут отображаться все синие купе типа топлива.

Я знаю, как отобразить все данные.Я знаю, как отображать данные, которые соответствуют всем критериям (используя AND).Как

  1. цвет - синий 2.type - переворот 3.fuel - дизель

Теперь будут отображаться все синие купе, работающие на дизельном топливе.Но иногда я не знаю, хочу ли я увидеть синие купе, которые работают на дизелях или бензине.Так что, если я не знаю, я оставляю это "все"

Может быть, это объясняет что-то, но ты.

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Этот код будет добавлять условия "ГДЕ" на основе известных значений. Возможно, это не самое быстрое решение этой конкретной проблемы, но его легко расширить.

** Обновлен до «взрыва» метода, предложенного Мэттом. H **

$sql = "SELECT * FROM test";
$conds = array();
if($car) {
  $conds[] = "car = '$car'";
}
if($color) {
  $conds[] = "color = '$color'";
}
// More conditions can be added if needed 

// Creating a WHERE string by imploding:
if(count($conds) > 0) {
  $where = implode(" AND ",$conds);
  $sql .= " WHERE ".$where; 
}  

mysql_query($sql);

Если у вас нет каких-либо условий, он просто "ВЫБЕРИТЕ * ИЗ ТЕСТА".

2 голосов
/ 03 мая 2011

Комбинация And Or сделает.

WHERE color = '$color' AND (car ='$car' OR '$car' = 'all')

ПРИМЕЧАНИЕ: Насколько мне известно, MySQL не делает никаких коротких замыканий, поэтому мы должны проверить производительность, если мы склонны к И или комбинациям.Другой альтернативой является использование IF, но перестановка критериев различных значений иногда делает невозможным работу.

Другой подход заключается в создании динамического запроса и включении только тех фильтров, которые необходимы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...