Выборка из БД

Тема в разделе "PHP", создана пользователем Viktor_93, 25 ноя 2018.

  1. Viktor_93

    Viktor_93

    Регистрация:
    25 ноя 2018
    Сообщения:
    0
    Симпатии:
    0
    Добрый день!

    Возникла проблема, нужна помощь мастеров, буду благодарен!
    Имеется фильтр:
    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
    }
    ?>
    Будьте добры, подскажите где копать?
     
  2. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.581
    Симпатии:
    1.482
    Здравствуйте.
    Гадать по фрагменту кода это мы не умеем. Ответ на ваш вопрос зависит от того что находится в $param['key'] когда вы выбираете больше одного параметра.
     
  3. Viktor_93

    Viktor_93

    Регистрация:
    25 ноя 2018
    Сообщения:
    0
    Симпатии:
    0
    Не подскажите как это определить?

    Генерируется вот такой запрос в УРЛ ?search[filter_enum_car_option]=tax-payd%2Celectric_mirrors
     
  4. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.581
    Симпатии:
    1.482
    например написать.
    PHP:
    var_dump($param);die; 
     
  5. Viktor_93

    Viktor_93

    Регистрация:
    25 ноя 2018
    Сообщения:
    0
    Симпатии:
    0
    Спасибо. Получил вот такой вывод
    Код:
    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) "Климат контроль"
      }
    }
     
  6. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.581
    Симпатии:
    1.482
    Код:
    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
     
    Baco нравится это.
  7. Viktor_93

    Viktor_93

    Регистрация:
    25 ноя 2018
    Сообщения:
    0
    Симпатии:
    0
    Спасибо за помощь! Купил движок самописный не могу до конца разобраться.

    Оказалось что ошибка скорей всего в этой строке
    Код:
    $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 значение, а если несколько через запятую то он не видит
     
  8. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.581
    Симпатии:
    1.482
    Повторюсь: Нам очень сложно гадать по частям кода.