У меня есть сущность, которая имеет 2 отношения «многие ко многим»:Существует Product
, который может иметь много категорий и много тегов.A Tag
или Category
также может иметь много продуктов.Схема прямо сейчас:
products
-------------
product_id
name
categories
-------------
category_id
name
tags
-------------
tag_id
name
products_categories
-------------
product_id
category_id
products_tags
-------------
product_id
tag_id
Мне нужно отобразить на одной странице список товаров со всеми их тегами и категориями.Проблема в том, что количество выполняемых мной запросов равно 2n + 1
, где n - количество продуктов, перечисленных на странице.Сначала я делаю:
select product_id, name from products
Затем в цикле в моем приложении я выполняю следующие запросы (в псевдокоде):
tags = []
categories = []
for each product
tags[product_id] = select t.tag_id, t.name
from products_tags as pt
join tags t
on pt.tag_id = t.tag_id
where pt.product_id = {product_id}
categories[product_id] = select c.category_id, c.name
from products_categories as pc
join categories c
on pc.category = c.category_id
where pc.product_id = {product_id}
end for each
Есть ли хороший подход, чтобы число выполненных запросов не зависело от количества запрашиваемых записей? Редактировать Для каждого продукта мне нужно отобразить данные в этом формате:
-------------------------------------------------------
| Product name: A good smartphone |
| Categories: Tech, Smartphone |
| Tags: smartphone, some-smartphone-brand, 4g |
| |
-------------------------------------------------------