Каталог с сортировкой: как решить проблему при выводе с сортировкой?

Создаю каталог компьютерной техники с фильтрами. Все фильтры заранее спарсены и все что необходимо есть в базе SQL.
Решил для более быстрой загрузки сайта, выборку товара делать по Ajax. например, человек зашел на сайт, страница быстренько загрузилась, потом красивая анимация что загружаются товары, в это время запрос к Классу, и он возврашает json категории товаров, с помошью jQuery метода .append() добавляю на сайт.
Все выглядит следуюшим образом.
ea41fb35a267.png

Далее идут checkbox.
При выборе значений, допустим нажали ASUS, страница отправляет Ajax запрос к серверу, там же эти параметры сохраняются в
$_SESSION['sorted_string'] = array(
    'Производитель' => array('ASUS','ZOTAC')
);

и с этими параметрами класс этот для выборки товаров

protected function sql (){
        self::$sql->where('*','catalog'); // составляем запрос типа SELECT * FROM catalog
        self::$sql->join('options','catalog.art','options.art'); // объеденяем таблицы в одно
        self::$sql->add('catalog_3',self::$catalog); // условие WHERE catalog_3 = Видеокарты
        self::$sql->add('price','0','!='); // фильтруем без ценника
        self::$sql->add('avail','0','!='); // фильтруем отсутствующие
        self::sql_sort();  // ОБРАТИТЕ ВНИМАНИЕ на этот метод
        self::$sql->query();  
        self::sorted_data(); // ASC или DESC
        self::$sql->limit(self::$start,self::$num);  // организовать пагинатор
        self::$sql->query();  
        self::$res = self::$sql->arr(); // вот тут готовый Массив с товарами 

    }


собственно вопрос, имея полученные значения типа name=>value как сортировать запрос если данные атрибутов находятся сериализованные в базе в таблице option, при выборке и унсериализации массив выглядит следуюшим образом
array (
  'Цена' => '26.7',
  'Производитель' => 'PALIT',
  'Графический процессор' => 'nVidia GeForce 210',
  'Частота графического процессора' => 589,
  'Объем видеопамяти' => 512,
  'Тип видеопамяти' => 'DDR3',
  'Частота видеопамяти' => 625,
  'Разрядность шины видеопамяти' => 32,
  'Интерфейс' => 'PCI-E 2.0',
  'Система охлаждения' => 'активное',
  'Особенности' => 
  array (
    0 => 'Разъем DVI',
    1 => 'Разъем VGA',
    2 => 'Разъем HDMI',
  ),
)


и сам метод для сортировки
protected function sql_sort (){
        if (self::$ajax_start){
            if(empty(self::$ajax_name) and empty(self::$ajax_value)){return;}
            if (isset($_SESSION['sorted_string'])){
                if (!in_array(self::$ajax_value,$_SESSION['sorted_string'])){
                    $_SESSION['sorted_string'][] = self::$ajax_value;
                }
                foreach ($_SESSION['sorted_string'] as $el){
                     // вот тут нужно сортировать 
                }
            }else{
                $_SESSION['sorted_string'][] = self::$ajax_value;
            }
            // и тут если это новое значение
        }
    }


Т.е проблема в том что есть массив параметров в $_SESSION , по которым нужно сортировать все это, но перед сортировку нужно запрос совершить для ПОЛУЧЕНИЯ МАССИВА ПАРАМЕТРОВ с option, это раз запрос, потом обрабатывать каждый товар из категории и смотреть есть ли в его массиве значение соответствуюшее.
И допустим у нас есть 100 товаро подходяшие. Но как их в SQL ввести то, это 100 условий нужно создавать?

Вот с такой проблемой столкнулся я и ночью не спал.

Кто чем поможет?
  • Вопрос задан
  • 3126 просмотров
Пригласить эксперта
Ответы на вопрос 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
если данные атрибутов находятся сериализованные в базе в таблице option,

Взять рельсу, и долго с наслаждением бить по голове того, кто стал хранить данные атрибутов сериализованные в базе в таблице option. Потом добавить по почкам.

Потом перепроектировать базу.
Сделать категории в нормальной таблице, приджойнить к запросу и сортировать по ним.
Ответ написан
fabrykant
@fabrykant
создайте таблицу с атрибутами:
id_атрибута | id_товара | название_атрибута | значение_атрибута
Ответ написан
Комментировать
Quber
@Quber
PHP Team lead
Не совсем понял что нужно. А сортировку нельзя на стороне клиента организовать средствами, knockout, например? Или Вам надо выборку из базы правильно составить?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы