2016-08-22 1 views
0

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

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

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

Например: ВХОД Категория = Автомобильные ВЫХОДА Теги = BMW, FORD

Таблицы:

CREATE TABLE product(
    id INT auto_increment primary key, 
    name varchar(255) 
); 

CREATE TABLE tags(
    id INT auto_increment primary key, 
    tag_name varchar(255) 
); 

CREATE TABLE product_tags(
    id INT auto_increment primary key, 
    tag_id INT, 
    product_id INT 
); 

CREATE TABLE product_categories(
    id INT auto_increment primary key, 
    category_name varchar(255), 
); 

CREATE TABLE categories(
    id INT auto_increment primary key, 
    category_id INT, 
    product_id INT 
); 

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

SELECT tags.id,tags.tag_name 
FROM tags,product_tags,product_categories 
WHERE product_tags.product_id IN (
    SELECT product_id 
    FROM categories 
    WHERE product_categories.id = (
     SELECT id 
     FROM category 
     WHERE id = 3) 
) 
GROUP BY tags.tag_id 
+0

Какие из решений вы пробовали у вас ближе всего к тому, что вы хотите? Что случилось с этим? – BeetleJuice

+0

Сообщение ваши попытки –

+0

ВЫБРАТЬ tags.tag_id, tag_types.tag из тегов, tag_types, категория ГДЕ tags.item_id В ( \t ВЫБОР PRODUCT_ID \t ИЗ категорий \t WHERE category_id = ( \t \t ВЫБРАТЬ ID \t \t ОТ категория \t \t WHERE name = 3)) GROUP BY tags.tag_id – StaalCtrl

ответ

-1

Это должно работать нормально

select disticnt t.* 
from tags t 
join product_categories pc on pc.category_name = 'Car' 
join categories on c.category_id = pc.category_id and c.product_id = p.id 
join product_tags pt on pt.tag_id = t.id and pt.product_id = p.id 
+0

Я хочу вывести теги, которые имеют продукты в выбранной категории товаров. Похоже, этот запрос выведет список продуктов, где теги уже известны/установлены – StaalCtrl

+0

Затем вы можете поменять местами таблицы с тегами. –

+0

Проверить сейчас Я обновил запрос –

0

Попробуйте это:

select 
distinct(t.tag_name) 
from tags t 
join product_categories pc on pc.category_name = 'Car' 
join categories c on c.category_id = pc.id 
join product_tags pt on pt.tag_id = t.id and pt.product_id = pc.id 
Смежные вопросы