another_dream
@another_dream
Backend-разработчик, Laravel/ZF2/Yii2

Как правильно хранить эти данные или как правильно их обрабатывать при запросе?

Есть необходимость хранить спецификацию товара, своего рода принадлежность к той или иной группе товаров в базе данных. При запросе определенной страницы, должны показывать только записи, имеющие в "спецификации" тип, который был запрошен(к примеру по фильтру). Что придумал на данный момент:
у n-товаров, в БД, в столбце спецификации, такая запись -- "phone fablet 2core etc". На странице запрашиваются товары имеющие отношение к спецификации "phone". Запрос
SELECT * FROM table WHERE specification LIKE '%phone%'

Насколько корректен этот вариант запроса, и в правильном ли направлении я двигаюсь в решении такого рода задачи? Буду благодарен за любые "тыкания носом" в "нехорошие" места и направления в нужную сторону. Спасибо.
  • Вопрос задан
  • 2447 просмотров
Решения вопроса 1
zoonman
@zoonman
⋆⋆⋆⋆⋆
Создайте отдельную таблицу, в которой будут ваши фильтры храниться и таблицу связи между продуктами и фильтрами. В таком случае можно будет легко выбирать похожие товары.
product <-> product_to_specification <-> specification
При необходимости можно будет классифицировать признаки спецификаций, показывать продукты имеющие теже спецификации или наиболее похожие по параметрам.
Если же потребуется полнотекстовый поиск, то сразу смотрите в сторону sphinx.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
LIKE '%phone%'так будет долго исполняться запрос..
надо ='phone'(LIKE 'phone%' (на крайний случай...))
многомерные связи - nosql-базы смотрите...
В mysql можно делать: деревом goods: (id,title,parent_id,type_id,prop_id), списком типов записей дерева link: (id, type: category, good, property, etc..), списком значений prop: (id,title,parent_id,param1,....paramN) и связующей таблицей (id,goods_id,prop_id).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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