Я работаю над фильтрами списка товаров, но не понимаю логику для одного условия, предложите мне изменения - PullRequest
1 голос
/ 21 сентября 2019

Я работаю над фильтрами списка товаров, но не понимаю логику для одного условия, предложите мне внести изменения .

Мой фрагмент кода (часть моей функциональности):

....
....
if((is_array($origin) && count($origin)>0)||(!is_array($origin) && $origin!=""))
{

    $origin = implode("','",$origin);

    $this->db->select('product_attributes_id');
    $this->db->where('title','Origin');
    $this->db->where('status',1);
    $this->db->where('is_active','Active');
    $result = $this->db->get('tbl_product_attributes');

    if($result->num_rows())
         $paFinRes = $result->result_array();
    else
         $paFinRes = array();

    $paId = $paFinRes[0]['product_attributes_id'];

    $filterQry .= " AND p.`product_id` IN (SELECT `product_id` FROM tbl_product_attributes_price WHERE `product_attributes_id`='".$paId."' AND `product_dimension` IN ('".$origin."'))";
}
....
....

это условие работает нормально со всеми другими параметрами фильтра ..

Работает хорошо для столбца происхождения базы данных со следующими значениями

Индия

Африка

Австралия

======================================================

Не работает хорошо для столбца происхождения базы данных со следующими значениями

Индия

Африка, Россия

Австралия, Бразилия

=======================================================

Пожалуйста, предложите мне изменения в вышеупомянутом множественном происхождении условия if (с запятой).

1 Ответ

0 голосов
/ 22 сентября 2019

Попробуйте цикл foreach, чтобы вам не пришлось индексировать row_arrays целыми числами.Насколько я понимаю, что-то вроде этого может работать:

$first_query = $this->db->select('product_attributes_id')
                        ->where('title','Origin')
                        ->where('status',1)
                        ->where('is_active','Active')
                        ->get('tbl_product_attributes')
                        ->result_array();

$second_query = $this->db->select('product_attributes_id')
                         ->where('title','Origin')
                         ->where('status',1)
                         ->where('is_active','Active')
                         ->get('tbl_product_attributes')
                         ->num_rows();

if($second_query > 0) {

    foreach($first_query as $row) {
      //Other code
    }
}
else {

   foreach($first_query as $row) {

      $paId = $paFinRes['product_attributes_id'];

      $filterQry .= " AND p.`product_id` IN (SELECT `product_id` FROM tbl_product_attributes_price WHERE `product_attributes_id`='".$paId."' AND `product_dimension` IN ('".$origin."'))";
      $this->db->query($filterQry);
   }
}

Не уверен, что это действительно решит вашу проблему, но я вижу, что вы не определяете результаты запроса напрямую, а вместо этого делаете это в выражениях.Значения могут быть как-то перепутаны, поэтому я изменил это на приведенное выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...