|
|
|
| Всем привет. В общем практически закончил работу над фильтром по технике - http://s60.radikal.ru/i170/1211/44/ae04173c7f09.png Его задача упростить поиск (отбор) нужной техники пользователем на сайте. До кнопки скрыть фильтра я использую такой запрос:
$pand = "AND a.`em_produce_state` = '".$t1."'".($t4 != 0 ? " AND a.`em_brand_id` = ".$t4 : "").($ymin != 0 && $ymax != 0 ? " AND a.`em_produce_year` BETWEEN ".$ymin." AND ".$ymax : "").($pvar != 'em' && $pmax != 0 ? " AND a.`em_produce_price_".$pvar."` BETWEEN ".$pmin." AND ".$pmax : "");
$cand = $t5 != 0 ? " AND b.`em_region_id` = ".$t5 : "";
function prod($t,$d,$pand='',$cand=''){
$prod = "
SELECT a.`em_produce_id`
FROM `em_produce` a
JOIN `em_company` b ON (b.`em_company_id` = a.`em_company_id`".$cand." AND b.`em_company_access` = 'y' AND b.`em_company_deleted` = 'n')
JOIN `em_business_group` c ON (c.`em_business_group_id` = a.`em_business_group_id` AND c.`em_business_group_access` = 'y' AND c.`em_business_group_deleted` = 'n')
WHERE a.`em_produce_".$t."` = ".$d."
".$pand."
AND a.`em_produce_access` = 'y'
AND a.`em_produce_deleted` = 'n'
";
$prod = select_query($prod);
return $prod['count'];
}
echo prod('group',$res3['result']['em_category_id'][$c],$pand,$cand); //вывод
|
Этот запрос выполняет весь отбор, что был произведен до кнопки скрыть фильтра. И видно, что в запрос, в зависимости от условий, я добавляю доп. условия отбора. После кнопки скрыть фильтра уже динамически подгружаются разные х-ки, по которым мы тоже фильтруем и этим сужаем поиск. Вот тут этих х-к очень много, доходит иногда до 18 блоков (3 блока в ряд). При отборе любой х-ки я сразу прохожу по всем х-кам и отбираю те, которые задействовал пользователь и отправляю их на сервер. В тот запрос, что в ф-ции, будут динамически добавляться еще условия отбора, т.е. может быть такое, если пользователь изменил значения в 3-х ползунках, то в запрос подставится 3 условия отбора подобного характера: (поля выдуманные, написал для наглядности)
AND a.`em_produce_year1` BETWEEN ".$ymin_1." AND ".$ymax_1
AND a.`em_produce_year2` BETWEEN ".$ymin_2." AND ".$ymax_2
AND a.`em_produce_year3` BETWEEN ".$ymin_3." AND ".$ymax_3
|
Вопрос в следующем, не слишком ли я нагружу этим сервер? Т.е. будет не мало условий отбора AND ..... | |
|
|
|
|
|
|
|
для: TetRiska
(08.11.2012 в 13:03)
| | Количество AND в WHERE на нагруженность практически не повлияет.
В основном нагруженность будет зависеть от размера базы, наличия/отсутствия индексов, частоты обращения. | |
|
|
|
|
|
|
|
для: Sfinks
(08.11.2012 в 19:22)
| | ясно, спасибо | |
|
|
|