Как выводить один и тот же товар в нескольких коллекциях?

P
На сайте с 06.01.2009
Offline
601
557

Всем привет.

Не могу придумать, как решить задачу.

Пример условный. Сайт по одежде. Есть коллекции одежды. Коллекция состоит из нескольких сочетаемых товаров, например, пальто, брюки, туфли и т.д. принадлежат одной коллекции и очень хорошо сочетаются.

В БД есть таблица товаров, у каждого из них прописано название коллекции, поэтому, само собой нет проблем вывести в коллекции №435 все товары принадлежащие данной коллекции.

НО! Есть например, обувь из коллекции №878 которая отлично сочетается с одеждой из коллекции №435. Также обувь из коллекции №878 отлично подходит и для коллекции №177. Помимо этого для коллекции №435 ещё подходит пальто из коллекции №222.

Задача, в коллекциях вывести доп товары, которые подходят...

ps простой вариант который вижу, это сделать доп поля в товарах и прописывать в них названия коллекций где ещё выводить этот товар. Но на мой взгляд это не лучший вариант, возможно есть более правильный.

Спасибо заранее

S
На сайте с 23.05.2004
Offline
315
#1

Правильно - это сделать таблицу вида: "product_id, collection_id" , где будет указано какой товар в какую коллекцию попадает. Так как поля являются int foregnkey - то выборка по ним будет осуществляться очень быстро.

Это просто подпись.
P
На сайте с 06.01.2009
Offline
601
#2
Stek:
Правильно - это сделать таблицу вида: "product_id, collection_id" , где будет указано какой товар в какую коллекцию попадает. Так как поля являются int foregnkey - то выборка по ним будет осуществляться очень быстро.

Я правильно понимаю - можно сделать несколько полей collection_id ? так как один товар может быть дополнительно (помимо основной коллекции) выведен в 2,3,4 и т.д. коллекциях.

Таким образом, при сборке товаров для вывода в коллекции №5, будет запрос типа такого

select...where collection_id=5 OR collection_id2=5 OR collection_id3=5 OR collection_id4=5
S
На сайте с 23.05.2004
Offline
315
#3

Нет, таблица из трех полей, примеру where_is:

id - primary key

collection_id - foregnkey на id коллекции

product_id - foregnkey на id продукта

Ну и записи соответственно:

1 3 10

2 3 11

3 3 12

4 4 10

5 4 15

Выбираем все коллекции, где есть ботинки с id=10

select * from where_is where product_id = 10

Выбираем все товары, которые попадают в коллекцию с id=4

select * from where_is where collection_id = 4

Т.е. в отдельной таблице хранятся данные, что к чему принадлежит.

P
На сайте с 06.01.2009
Offline
601
#4

Stek, ок, ясно. Т.е. если в коллекции №3 нужно будет вывести товар №27 не принадлежащий безусловно ей, то придется руками дописывать в таблицу

6 3 27

В принципе есть другая мысль в сочетании с вашей.

У меня есть таблица товаров, около 20000 наименований.

Таблица с большим кол-вом полей, в том числе "безусловная" коллекция товара. Когда собирается коллекция, то проверяется поле в этой таблице

tovary where collection = 4

думаю нужно просто сделать отдельную таблицу, как показали вы, для товаров которые дополнительно нужно вывести в той или иной коллекции.

Спасибо!

Joker-jar
На сайте с 26.08.2010
Offline
171
#5

Это связь "многие ко многим", можете почитать матчасть, делается, как подсказали выше, через промежуточную таблицу со связками "id элемента - id категории".

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий