Перейти к содержанию
smotrikov

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

Рекомендуемые сообщения

Доброго времени суток ! Всплыла следующая проблема , как реализовать фильтры на этом движке  ? Задача не является чем-то из области фантастики ,однако проблема в следующем : в БД (в таблице 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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.