Jump to content
Sign in to follow this  
smotrikov

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

Recommended Posts

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

Edited by EVMedvedev

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

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

 

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.