стоит передо мной задача, в поле со списком пользователь может выбрать несколько значений (до 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`";А потом вставляем переменную $r в запрос после WHERE.
else $r="`room_count`>='количество комнат'";
Спустя 7 минут, 14 секунд (1.08.2010 - 00:54) umnik90 написал(а):
Rand
Логично, я даже не представлял что так можно.
Спасибо огромное!
Логично, я даже не представлял что так можно.
Спасибо огромное!