[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фильтрация mysql
umnik90
добрый вечер,
стоит передо мной задача, в поле со списком пользователь может выбрать несколько значений (до 11), исходя из этого произвожу фильтрацию в запросе к мусклу.
http://www.slon.dn.ua/zhilcom/zhilcom_in.php

Считаю количество выбранных элементов

if (count($district) == 1) {


и если количество 1, `district` = $district[0]


$result = mysql_query ("SELECT `ad_index`, `ad_date`, `ad_title`, `ad_html`, `district`, `orient`, `phones`, `total_space`, `floors_num`, `state`, `material`, `house_type`, CAST(`price` AS SIGNED) as `price`, `room_count`, `living_space`, `kitchen_space`, `planning`, `floor`, `toilet`, `balcony`, `loggia` FROM zhilcom_class_advert_flat_sale WHERE `price` >= $price_start AND `price` <= $price_finish AND (`district` = $district[0]) AND `orient` LIKE '$orient' ORDER BY $key ", $db);
}


и так далее, если количество 2 `district` = $district[0] OR `district` = $district[1]

Дошел до 4 и задумался - а способ попроще вообще есть?

Дело в том, что внутри if-а еще несколько проверок.... Кстати, может есть способ в запросе к БД такого содержания: WHERE `поле` = ЛЮБОЕ)

Пока придумал только так: при отсутствии выбора в поле со списком по полю "Количество комнат" переменную $room равнять %

и тогда через LIKE
SELECT `ad_index`, `ad_date`, `ad_title`, `ad_html`, `district`, `orient`, `phones`, `total_space`, `floors_num`, `state`, `material`, `house_type`, CAST(`price` AS SIGNED) as `price`, `room_count`, `living_space`, `kitchen_space`, `planning`, `floor`, `toilet`, `balcony`, `loggia` FROM zhilcom_class_advert_flat_sale WHERE `room_count` LIKE '%'  


но не решает проблему когда "4 и более комнат" в обычном случае сделал бы `room_count` => 4. А так приходится делать проверку на пустоту поля и на "4 и более" и для каждого делать свой запрос, а это раздражает.






Спустя 12 минут, 9 секунд (1.08.2010 - 00:25) Rand написал(а):
Чтобы не писать много OR существует конструкция WHERE field IN (val1,val2,val3). В твоем случае можно так:
$d=implode(",",$district);
$result = mysql_query ("SELECT `ad_index`, `ad_date`, `ad_title`, `ad_html`, `district`, `orient`, `phones`, `total_space`, `floors_num`, `state`, `material`, `house_type`, CAST(`price` AS SIGNED) as `price`, `room_count`, `living_space`, `kitchen_space`, `planning`, `floor`, `toilet`, `balcony`, `loggia` FROM zhilcom_class_advert_flat_sale WHERE `price` >= $price_start AND `price` <= $price_finish AND `district` IN (".$d.") AND `orient` LIKE '$orient' ORDER BY $key ", $db);

Спустя 16 минут, 11 секунд (1.08.2010 - 00:41) umnik90 написал(а):
Rand
Шикаааарно ) спасибо

с этим не поможете?
Цитата
может есть способ в запросе к БД такого содержания: WHERE `поле` = ЛЮБОЕ)

Пока придумал только так: при отсутствии выбора в поле со списком по полю "Количество комнат" переменную $room равнять %

и тогда через LIKE
SELECT `ad_index`, `ad_date`, `ad_title`, `ad_html`, `district`, `orient`, `phones`, `total_space`, `floors_num`, `state`, `material`, `house_type`, CAST(`price` AS SIGNED) as `price`, `room_count`, `living_space`, `kitchen_space`, `planning`, `floor`, `toilet`, `balcony`, `loggia` FROM zhilcom_class_advert_flat_sale WHERE `room_count` LIKE '%' 


но не решает проблему когда "4 и более комнат" в обычном случае сделал бы `room_count` => 4. А так приходится делать проверку на пустоту поля и на "4 и более" и для каждого делать свой запрос, а это раздражает.

Спустя 5 минут, 58 секунд (1.08.2010 - 00:47) Rand написал(а):
Что мешает хранить часть запроса в переменной?
if(если количество комнат не указано) $r="`room_count`=`room_count`";
else $r="`room_count`>='количество комнат'";
А потом вставляем переменную $r в запрос после WHERE.

Спустя 7 минут, 14 секунд (1.08.2010 - 00:54) umnik90 написал(а):
Rand
Логично, я даже не представлял что так можно.

Спасибо огромное!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.