2016-08-22 19 views
0

我正在尝试使用两步筛选器对使用产品类别和产品标签的产品进行排序。如何使用类别和标签的组合来制作MySQL筛选器

一个产品可以有几个类别和几个标签。

但是,此时只能选择一个类别。在用户选择了一个类别之后,我只想显示具有所选类别中产品的标签。

例如: INPUT 类别=车 输出 标签=宝马,福特

表:

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

SELECT tags.tag_id,tag_types.tag FROM标签,tag_types, 类别WHERE tags.item_id IN( \t SELECT PRODUCT_ID \t FROM类别 \t WHERE CATEGORY_ID =( \t \t SELECT ID \t \t FROM类别 \t \t其中名称= 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