Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL оператор Or

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
День добрый!
 
В голову мысли не приходят, как реализовать выборку из БД (MySQL) с использованием нескольких параметров. Например.
Есть 8 селектов, при помощи ajax передаю в php данные, дальше вставляю полученные данные в строку подключения. Короче все как обычно.
Загвоздка в том, что 5 из 8 селектов не обязательны к заполнению, но один или несколько (все) из них могут быть заполнены.  
Вот тут и ступр у меня, не писать же 25 видов строк подключения через IF.
Может быть запихать все переменные в массив, затем его перебрать, и вытащить те которые имеют значения? Если так, то на какой стороне это лучше сделать на клиенте или на сервере?  
 
Добавлено:
Мда, забыл добавить, что в случае если в select ничего не выбрали он возвращает 0.
 
 
Добавлено:
Загнал все переменные в массив, а что дальше ума не приложу.

Код:
 
$check = array($year_car, $mileage_car, $body_type, $transmission, $price_car);
foreach($check as $v) {
   $i = $check;
}
 

 
как и него вытащить те которые не равны 0, и как составить строку запроса.

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 16:24 09-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
WHERE par1 = 1 AND par2 = 2 AND par3 = 3 ..
 
составляете эту часть запроса с помощью php и добавляете в нее то, что было выбрано из формы

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:48 09-08-2013 | Исправлено: Cheery, 18:50 09-08-2013
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery это первое, что пришло мне на ум. Однако если один или несколько par = NULL? Тогда что?
Ведь они передаются php скрипту запросом ajax, а по условию 5 параметров не обязательны для заполнения пользователем. Отсюда и вытекает вопрос как оперировать тем, что некоторые из параметров равны NULL.
 
Не городить же 25 секций If, и столько же строк запроса к базе.
Вот я и собрал массив из 5 параметров которые могут быть NULL, а могут содержать значения.
 

Код:
 
$check = array($year_car, $mileage_car, $body_type, $transmission, $price_car);  
foreach($check as $v) {  
   $i = $check;  
}
 

 
Теперь бы как то перебрать этот массив, и вытянуть из него те которые не равны 0, затем составить строку запроса вида WHERE par1 = 1 AND par2 = 2 AND par3 = 3 ..

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 19:34 09-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
зачем null?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:49 09-08-2013
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery есть 8 переменных 3 из которых точно содержат значения, а 5 из них могут содержать значения, а могут и не содержать.

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 19:54 09-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
а 5 из них могут содержать значения, а могут и не содержать.

если не содержат, то зачем их указывать в запросе?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:56 09-08-2013
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery потому что они могут содержать значения необходимые для более точного условия выборки из БД. Пока мне в голову пришло только это.

Код:
 
if ($year_car!=0) {$DB_year_car = "AND model='.$year_car.'";}
if ($mileage_car!=0) {$DB_mileage_car = "AND model='.$mileage_car.'";}
if ($body_type!=0) {$DB_body_type = "AND model='.$body_type.'";}
if ($transmission!=0) {$DB_transmission = "AND model='.$transmission.'";}
if ($price_car!=0) {$DB_price_car = "AND model='.$price_car.'";}
$con=mysqli_connect($dbhost,$dbuname,$dbpass,$dbname);
mysqli_query($con, "set CHARACTER SET UTF8");
$result_search = mysqli_query($con, 'SELECT model FROM `catalog` WHERE `new` = $ID_car AND `name` = $car_name AND `model` = $car_model  $DB_year_car $DB_mileage_car $DB_body_type $DB_transmission $DB_price_car');
 

Еще не проверял, но в теории должно работать. Что скажешь?
 

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 20:05 09-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
<select name='s[s1]'>
<option value='1'>1</option>
</select>
<select name='s[s2]'>
<option value=''></option>
<option value='2'>2</option>
</select>
...
 
$sql = '';
$allowed_keys = array('s1', 's2');
foreach($_POST['s'] as $key => $value)
{
if (in_array($key, $allowed_keys) && !empty($value))
  $sql .= ' AND ' . $key . ' = "' . mysql_real_escape_string($value) . '"';
}
 
не проще что то такое сделать??

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:17 09-08-2013 | Исправлено: Cheery, 20:28 09-08-2013
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кажется мне нет, у меня значения select передаются ajax'ом, да и код который я привел, еще не проверил, ща проверю. И может окажется что Ваш вариант не проще, а единственный.

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 20:26 09-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
я там дописал..

Цитата:
if (in_array($key, $allowed_keys) && !empty($value))

 

Цитата:
у меня значения select передаются ajax'ом

и что?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:28 09-08-2013
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery подскажи как задать в строке выборки из БД, что бы вернулись записи где определенные значения от скажем 10 до 15.

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 21:20 09-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
где определенные значения от скажем 10 до 15.

WHERE record >= 10 AND record <= 15
 
WHERE record BETWEEN 10 AND 15
 
WHERE record IN (10,11,12,13,14,15)
 
...


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:41 09-08-2013
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все спасибо разобрался, выборка из БД работает как атомные часы.  
Тему можно, закрывать.

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 21:46 09-08-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL оператор Or


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru