Добрый день! Возникла проблема, нужна помощь мастеров, буду благодарен! Имеется фильтр: https://yadi.sk/i/lV5lctmQw1fEew Имеется выбор в объявлении: https://yadi.sk/i/HxFDGwzRxH1ZtA Проблема состоит в том что если в объявлении выбрать один параметр, например растаможена то объявление в фильтре отображается, если выбрать 2 параметра то объявления в фильтре не отображается. Я предполагаю что это связано с выборкой из БД. Т.к. параметры записываются через запятую и видимо запрос их не выбирает. Скрин БД: https://yadi.sk/i/EEEHAve3puUwog Вот весь код фильтра. Я предполагаю что проблема в синтаксисе 13 строки. Код: <?php if(mysql_num_rows($get_parameters)>0){ ?> <div class="search-form-filters"> <?php mysql_data_seek($get_parameters, 0); $params_count=1; $param_pairs=0; $params_columns=1; while($param=mysql_fetch_assoc($get_parameters)){ $param['validators']=unserialize($param['validators']); $param['values']=array(); $get_values=mysql_query("SELECT * FROM `category_parameter_values` WHERE (`keys` LIKE '".$param['key'].",%' OR `keys` LIKE '%,".$param['key'].",%' OR `keys` LIKE '%,".$param['key']."' OR `keys`='".$param['key']."') AND FIND_IN_SET(".$search_category.", `cids`) AND `active`='1' ORDER BY `sort` ASC;"); while($value=mysql_fetch_assoc($get_values)){ $param['values'][$value['key']]=$value['value_'.$config['lang']]; } if($param['type']=='price' || $param['type']=='salary'){ $param['suffix_'.$config['lang']]=$currencies[$selected_currency]; } ?> <?php if($param['type']=='select' || $param['type']=='checkboxes'){ ?> <?php if($params_columns>5 || $param_pairs%2==0){ ?> <div class="search-form-filter" data-type="<?php echo $param['type']; ?>"> <?php } ?> <div class="search-form-filter-input"> <input type="text" name="search[<?php echo $param['url_key']; ?>]" class="form-control<?php if(trim($search[$param['url_key']])!=''){ ?> filled-input<?php } ?>" value="<?php echo htmlspecialchars(trim($search[$param['url_key']])); ?>" placeholder="<?php echo $param['label_'.$config['lang']]; ?>" readonly> <i class="fa fa-chevron-down"></i> <div class="filled-label<?php if(trim($search[$param['url_key']])==''){ ?> hidden<?php } ?>"><span><?php echo implode(', ', array_intersect_key($param['values'], array_flip(explode(',', $search[$param['url_key']])))); ?></span><i class="fa fa-times" title="<?php echo l('list_param_clear'); ?>"></i></div> <?php if(count($param['values'])>0){ ?> <ul class="dropdown-menu hidden"> <?php foreach($param['values'] as $key=>$label){ ?> <?php $is_selected=((in_array($key, explode(',', trim($search[$param['url_key']]))))?true:false); ?> <li data-value="<?php echo $key; ?>" data-label="<?php echo $label; ?>" data-selected="<?php echo (($is_selected)?'true':'false'); ?>"> <a href="javascript:void(0);"><i class="fa fa-square-o<?php if($is_selected){ ?> hidden<?php } ?>"></i><i class="fa fa-check-square-o<?php if(!$is_selected){ ?> hidden<?php } ?>"></i><?php echo $label; ?></a> </li> <?php } ?> </ul> <?php } ?> </div> <?php if($params_columns>5 || !($param_pairs%2==0) || $params_count==mysql_num_rows($get_parameters)){ ?> </div> <?php } ?> <?php $param_pairs=$param_pairs+1; ?> <?php $params_count++; ?> <?php if($param_pairs%2==0){ $params_columns++; } ?> <?php } ?> <?php if($param['type']=='input' || $param['type']=='price' || $param['type']=='salary'){ ?> <div class="search-form-filter" data-type="<?php echo $param['type']; ?>"> <div class="search-form-filter-input" data-prefix="<?php echo l('list_prefix_from'); ?>" data-suffix="<?php echo $param['suffix_'.$config['lang']]; ?>"> <input type="text" name="search[<?php echo $param['url_key']; ?>][from]" class="form-control<?php if(trim($search[$param['url_key']]['from'])!=''){ ?> filled-input<?php } ?>" value="<?php echo htmlspecialchars(trim($search[$param['url_key']]['from'])); ?>" placeholder="<?php echo $param['label_'.$config['lang']]; ?><?php if($param['suffix_'.$config['lang']]!=''){ ?> (<?php echo $param['suffix_'.$config['lang']]; ?>)<?php } ?>, <?php echo l('list_prefix_from'); ?>"> <div class="filled-label<?php if(trim($search[$param['url_key']]['from'])==''){ ?> hidden<?php } ?>"><span><?php echo l('list_prefix_from'); ?> <?php echo htmlspecialchars(trim($search[$param['url_key']]['from'])); ?> <?php echo $param['suffix_'.$config['lang']]; ?></span><i class="fa fa-times" title="<?php echo l('list_param_clear'); ?>"></i></div> </div> <div class="search-form-filter-input" data-prefix="<?php echo l('list_prefix_to'); ?>" data-suffix="<?php echo $param['suffix_'.$config['lang']]; ?>"> <div class="bracket"></div> <input type="text" name="search[<?php echo $param['url_key']; ?>][to]" class="form-control<?php if(trim($search[$param['url_key']]['to'])!=''){ ?> filled-input<?php } ?>" value="<?php echo htmlspecialchars(trim($search[$param['url_key']]['to'])); ?>" placeholder="<?php echo $param['label_'.$config['lang']]; ?><?php if($param['suffix_'.$config['lang']]!=''){ ?> (<?php echo $param['suffix_'.$config['lang']]; ?>)<?php } ?>, <?php echo l('list_prefix_to'); ?>"> <div class="filled-label<?php if(trim($search[$param['url_key']]['to'])==''){ ?> hidden<?php } ?>"><span><?php echo l('list_prefix_to'); ?> <?php echo htmlspecialchars(trim($search[$param['url_key']]['to'])); ?> <?php echo $param['suffix_'.$config['lang']]; ?></span><i class="fa fa-times" title="<?php echo l('list_param_clear'); ?>"></i></div> </div> </div> <?php $param_pairs=$param_pairs+2; ?> <?php $params_count++; ?> <?php $params_columns++; ?> <?php } ?> <?php } ?> </div> <?php } ?> Будьте добры, подскажите где копать?
Здравствуйте. Гадать по фрагменту кода это мы не умеем. Ответ на ваш вопрос зависит от того что находится в $param['key'] когда вы выбираете больше одного параметра.
Не подскажите как это определить? Генерируется вот такой запрос в УРЛ ?search[filter_enum_car_option]=tax-payd%2Celectric_mirrors
Спасибо. Получил вот такой вывод Код: array(20) { ["sort"]=> string(2) "12" ["id"]=> string(3) "112" ["key"]=> string(10) "car_option" ["name"]=> string(10) "car_option" ["type"]=> string(10) "checkboxes" ["url_key"]=> string(22) "filter_enum_car_option" ["post_key"]=> string(16) "param_car_option" ["label_ru"]=> string(18) "Доп. опции" ["label_en"]=> string(10) "car option" ["has_adding_form"]=> string(1) "1" ["has_searching_form"]=> string(1) "1" ["suffix_ru"]=> string(0) "" ["suffix_en"]=> string(0) "" ["is_numeric"]=> string(1) "0" ["multi_select"]=> string(1) "1" ["cids"]=> string(301) "108,963,965,969,973,1413,1419,979,981,983,985,987,989,991,997,1007,1009,1011,1015,1019,1023,1327,1331,1035,1329,1037,1333,1043,1045,1053,1055,1399,1063,1351,1353,1065,1067,1069,1359,1355,1357,1071,1077,1079,1081,1361,1093,1095,1097,1101,1103,1105,1107,1109,1111,1115,1117,1119,1121,1123,1127,1131,1133" ["validators"]=> array(0) { } ["offer_seek"]=> string(0) "" ["active"]=> string(1) "1" ["values"]=> array(8) { ["tax-payd"]=> string(22) "Растаможена" ["electric_mirrors"]=> string(28) "Электрозеркала" ["electric_windows"]=> string(38) "Эл. стеклоподъемники" ["air_con"]=> string(22) "Кондиционер" ["security"]=> string(31) "Охранная система" ["park_assist"]=> string(20) "Парктроник" ["Condition"]=> string(22) "Кондиционер" ["climate-controle"]=> string(29) "Климат контроль" } }
Код: SELECT * FROM `category_parameter_values` WHERE (`keys` LIKE 'car_option,%' OR `keys` LIKE '%,car_option,%' OR `keys` LIKE '%,car_option' OR `keys`='car_option') AND FIND_IN_SET(".$search_category.", `cids`) AND `active`='1' ORDER BY `sort` ASC; С этими данными у нас получается такой запрос. Есть еще одна неизвестная - что такое $search_category
Спасибо за помощь! Купил движок самописный не могу до конца разобраться. Оказалось что ошибка скорей всего в этой строке Код: $joins[]="INNER JOIN `ad_parameters` AS `ap_".md5($param['name'])."` ON `ads`.`aid`=`ap_".md5($param['name'])."`.`aid` AND `ap_".md5($param['name'])."`.`key`='".$param['name']."' AND FIND_IN_SET(`ap_".md5($param['name'])."`.`values`, '"._F($criteria)."')"; Получается что он находит строку если там 1 значение, а если несколько через запятую то он не видит