Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не слишком ли нагружен фильтер по технике?
 
 автор: TetRiska   (08.11.2012 в 13:03)   письмо автору
 
 

Всем привет. В общем практически закончил работу над фильтром по технике - 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 .....

  Ответить  
 
 автор: Sfinks   (08.11.2012 в 19:22)   письмо автору
 
   для: TetRiska   (08.11.2012 в 13:03)
 

Количество AND в WHERE на нагруженность практически не повлияет.
В основном нагруженность будет зависеть от размера базы, наличия/отсутствия индексов, частоты обращения.

  Ответить  
 
 автор: TetRiska   (09.11.2012 в 12:54)   письмо автору
 
   для: Sfinks   (08.11.2012 в 19:22)
 

ясно, спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования