Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Реорганизация логики работы атрибутов


Recommended Posts

Доброго времени суток ! Всплыла следующая проблема , как реализовать фильтры на этом движке  ? Задача не является чем-то из области фантастики ,однако проблема в следующем : в БД (в таблице product_attribute )  храниться около 1 500 000 записей ,и под одним attribute_id храниться разный текст ( + пока не ясно как фильтровать в атрибутах по диапазону).Прилагаю скрин.

В плане написать на php фильтры не составляет никакого труда , однако использовать id атрибута не возможно , like заметно тормозит  + не очень и точный .Вариант переделать логику этих атрибутов - мне кажется самым приемлемым. Возможно вместо (`text`) вносить id текста , а сам текст атрибута вынести в другую таблицу (и сделать уникальным)  ,что позволит в 100-ни раз уменьшить эту таблицу ,так как сейчас она 70 мб.Возможно кто-то сталкивался таким ,или на свежую голову предложит решение  ?Заранее спасибо

 

post-683556-0-10473500-1401397770_thumb.jpg

Надіслати
Поділитися на інших сайтах


Почему нельзя в сам запрос добавить attribute_id? Это очень существенно уменьшит выборку + это первичный ключ, уже проиндексированный, поиск по нему быстрый.

+ можно создать индекс по полю 'text', после чего искать или по точному совпадению или по вхождению в начало: LIKE 'для ЖК%', тогда эти индексы будут использоваться

Возможно вместо (`text`) вносить id текста , а сам текст атрибута вынести в другую таблицу (и сделать уникальным)  ,что позволит в 100-ни раз уменьшить эту таблицу ,так как сейчас она 70 мб.

Логичный и очень правильный вариант, удивляюсь почему в самом движке так не сделано.

Но для этого нужно очень много кода переписать в самом движке, везде, где есть работа с атрибутами + потом поддерживать все это при смене версий движка.

А вообще написание своего фильтра это очень трудоемкое занятие. Фильтр это достаточно сложный модуль с сложным кодом. Это только на первый взгляд кажется что это просто и напишется за 2 вечера )) А реально на написание нормального фильтра уйдет десятки часов.

Лучше взять какой-то готовый фильтр (есть и бесплатные модули) и переделать его под себя.

Надіслати
Поділитися на інших сайтах

Почему нельзя в сам запрос добавить attribute_id? Это очень существенно уменьшит выборку + это первичный ключ, уже проиндексированный, поиск по нему быстрый.

+ можно создать индекс по полю 'text', после чего искать или по точному совпадению или по вхождению в начало: LIKE 'для ЖК%', тогда эти индексы будут использоваться

Логичный и очень правильный вариант, удивляюсь почему в самом движке так не сделано.

Но для этого нужно очень много кода переписать в самом движке, везде, где есть работа с атрибутами + потом поддерживать все это при смене версий движка.

А вообще написание своего фильтра это очень трудоемкое занятие. Фильтр это достаточно сложный модуль с сложным кодом. Это только на первый взгляд кажется что это просто и напишется за 2 вечера )) А реально на написание нормального фильтра уйдет десятки часов.

Лучше взять какой-то готовый фильтр (есть и бесплатные модули) и переделать его под себя.

Это конечно все хорошо и таким способом наименьшие потери будут (на время и разработку ) но есть атрибуты типа :  26 - 55" - одна строка, и так для каждого товара , как сделать поиск по диапазону ,снова like .Сомневаюсь за точность  

Надіслати
Поділитися на інших сайтах


Это конечно все хорошо и таким способом наименьшие потери будут (на время и разработку ) но есть атрибуты типа :  26 - 55" - одна строка, и так для каждого товара , как сделать поиск по диапазону ,снова like .Сомневаюсь за точность  

 

По диапазонам со строковыми типами данных работать мягко говоря не просто, если не сказать невозможно (а проблема ОС именно в том, что все значения атрибутов - строчные). Возможно вы не тот движок выбрали для вашей задачи. Есть движок, у котором логика атрибутов совершенно иная и там есть возможность задавать любое количество атрибутов товара с разными типами данных.

Змінено користувачем EVMedvedev
Надіслати
Поділитися на інших сайтах


Это конечно все хорошо и таким способом наименьшие потери будут (на время и разработку ) но есть атрибуты типа :  26 - 55" - одна строка, и так для каждого товара , как сделать поиск по диапазону ,снова like .Сомневаюсь за точность

Как вариант разбить этот атрибут на 2: "От" и "До", после чего на странице товара для более удобного отображения собрать в 1.

И решиться проблема с поиском.

Надіслати
Поділитися на інших сайтах

По диапазонам со строковыми типами данных работать мягко говоря не просто, если не сказать невозможно (а проблема ОС именно в том, что все значения атрибутов - строчные). Возможно вы не тот движок выбрали для вашей задачи. Есть движок, у котором логика атрибутов совершенно иная и там есть возможность задавать любое количество атрибутов товара с разными типами данных.

Согласен полностью , но выбор был не велик , на фирме до меня приобрели shop-script 5  (посмотрел я его и впал в ужас, сам фрэймворк вебасист вроде и не плохой ,документация хорошая ... НО под него что бы писать много времени надо на изучение устройства движка и .тд) ,поэтому выбрал opencart , так как раньше с ним немного работал + юзал codeigniter . Если бы атрибуты вводились в ручную было бы иначе , но весь товар парситься через catalogloader  (логику таблиц менять нельзя )

 

Как вариант разбить этот атрибут на 2: "От" и "До", после чего на странице товара для более удобного отображения собрать в 1.

И решиться проблема с поиском.

Уже продумываем вариант подобной реализации .Вообщем если удастся решить проблему -обязательно выложу решение )

 

 

Всем спасибо большое !

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.