MySQL: ВЫБЕРИТЕ DISTINCT из нескольких таблиц - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть база данных с несколькими таблицами.Для примера я упросту это и попытаюсь объяснить подробно.

Одна таблица называется «Продукты», другая - «Бренды», а последняя - «Категории».

Как вы уже догадались, каждыйПродукт может иметь только одну назначенную категорию.Также каждому продукту может быть присвоен только один бренд.Это отношения.

Итак, на одной странице у меня есть ссылки с Брэндами в качестве параметра, которые я передаю на страницу с подробностями, где я перечисляю все товары от конкретного Бренда.На этой странице у меня также есть фильтр по категориям, который фильтрует только продукты из выбранной марки по этому фильтру.

Например, Sony -> тогда применяемый фильтр из выпадающего списка - это dSLR -> Результаты продуктов камеры dSLR бренда Sony.

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

Например, категории предопределены как: dSLR, видео, сотовый телефон., Обувь

У Sony много продуктов, но обувь не производится, поэтому я хотел бы исключить ее из списка фильтров на странице сведений.

Надеюсь, вы поняли, что я хочу здесь ...

Любое предложение более чем приветствуется:)

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

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

SELECT DISTINCT c.category_id, c.category_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
JOIN brands b ON p.brand_id = b.brand_id
WHERE b.brand_name='Sony';

и затем отобразить продукты следующим образом:

SELECT p.product_id, p.product_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
JOIN brands b ON p.brand_id = b.brand_id
WHERE b.brand_name='Sony' AND c.category_id='1234';

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

0 голосов
/ 27 сентября 2011

Одним из способов является выбор списка отдельных категорий из продуктов определенного бренда.

Вы можете сделать это следующим образом:

SELECT DISTINCT(cat_id) FROM PRODUCTS WHERE brand_id = 'sony'

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

Приведенный выше запрос может быть немного медленным для выполнения каждого запроса страницы. Вы можете ускорить его, создав ИНДЕКС на brand_id, cat_id

...