【发布时间】:2016-08-22 12:37:01
【问题描述】:
我正在尝试制作一个两步过滤器,以使用产品类别和产品标签对产品进行排序。
一个产品可以有多个类别和多个标签。
但是,当时只能选择一个类别。用户选择类别后,我只想显示所选类别中包含产品的标签。
例如: 输入 类别 = 汽车 输出 标签 = 宝马、福特
表格:
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
【问题讨论】:
-
您尝试过哪些解决方案最接近您想要的?它有什么问题?
-
SELECT tags.tag_id,tag_types.tag FROM tags,tag_types,category WHERE tags.item_id IN ( SELECT product_id FROM categories WHERE category_id = ( SELECT id FROM category WHERE name = 3) ) GROUP BY 标签。 tag_id
-
有数百种排列吗?
-
我认为 product_categories 和 categories 表名是互换的;这令人困惑。在表格格式中提供表格数据和所需的结果集,然后只有我可以编写正确的查询。
-
我更改了相关表的名称以简化它,并错误地复制了我的原始查询。这是具有正确表名的查询。 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
标签: mysql inner-join multiple-select-query