Как привязать товары к категориям? - PullRequest
4 голосов
/ 03 мая 2011

Когда я впервые попытался это сделать, в таблице категорий я создал поле с именем query. Это содержит строки, такие как:

brand = "Burberry" И тип! = "Часы"

Который я затем вставил в предложение WHERE запроса, чтобы найти продукты категории.

Вероятно, это был не лучший дизайн.


Моя вторая попытка заключалась в использовании системы тегов. Я хотел бы создать таблицу тегов с тегами, такими как Burberry и Watch. У меня была таблица, привязывающая теги к продуктам (HABTM). У меня также была таблица, связывающая теги с категориями.

В таблице, привязывающей теги к категориям, есть дополнительное поле с именем include, которое, если оно было 1 , то и у всех выбранных продуктов также должен быть этот тег. Или, если это был 0 , то все выбранные продукты НЕ должны иметь этот тег.

Это казалось лучшим дизайном, чем мой оригинал, но требовало довольно сложных соединений.


Теперь мне нужно еще раз подойти к этой проблеме.

Разница лишь в том, что я сейчас использую платформу CakePHP (1.3).

Прежде чем я попробую заново изобрести колесо. Мне было интересно, есть ли какие-либо известные шаблоны / решения, которые я мог бы использовать?

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Возможно, вы уже сделали это как-то сейчас, но вот мои 2цента:

Я бы отбросил теги категорий <->, потому что я чувствую, что вы без необходимости дублируете данные. То есть таблицы должны быть только categories, categories_products, products, products_tags и tags.

Таким образом:

  1. вам не придется беспокоиться об изменении тегов категории при добавлении или удалении товаров из категории
  2. Ваш поиск станет более равномерным (поскольку существует только одна таблица тегов)
  3. и ваши теги по-прежнему будут не более 3-х JOINS далеко - что довольно удобно:)
0 голосов
/ 03 мая 2011

Может быть, я упускаю то, что вы пытаетесь выполнить, но похоже, что вы делаете это более сложным, чем нужно.

Создайте три таблицы: Product, Category и ProductCategory.,Продукт и категория имеют идентификаторы.Тогда ProductCategory включает пары ProductId / CategoryId.

Как:

Product
ProductId  Name
1          Lamp
2          Carpet
3          Drill
4          Power cord
5          3/8" bolt

Category
CategoryId  Name
1           Electrical
2           Home decor
3           Hardware

ProductCategory
ProductId  CategoryId
1          1
1          2
2          2
3          1
3          3
4          1
5          3

Тогда, если вы хотите, например, знать все элементы "Hardware":

select product.*
from category
join productcategory using (categoryid)
join product using (productid)
where category.name='Hardware'
0 голосов
/ 03 мая 2011

Насколько я понимаю, у вас должно быть 5 таблиц:

  • Категории
  • Продукты
  • Теги
  • Категории_ Теги
  • Products_Tags

ОБНОВЛЕНИЕ: Когда пользователь определяет, что должно быть выбрано, таблицы HABTM обновляются так, что теги / категории ссылаются на товары, с которыми они должны быть связаны только.

Таким образом, запрос будет выглядеть примерно так:

ВЫБРАТЬ * ИЗ ПРОДУКТОВ, ГДЕ ИДЕНТИФИКАТОР (ВЫБЕРИТЕ product_id из списка тегов, чтобы включить) И ИД НЕ ВХОДИТ (выберите тег product_id ОТ списка тегов, чтобы НЕ включать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...