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

Создаю каталог компьютерной техники с фильтрами. Все фильтры заранее спарсены и все что необходимо есть в базе 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, например? Или Вам надо выборку из базы правильно составить?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы