首页 / MYSQL / MySQL搜索产品及其属性
MySQL搜索产品及其属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL搜索产品及其属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2104字,纯文字阅读大概需要4分钟。
内容图文
![MySQL搜索产品及其属性](/upload/InfoBanner/zyjiaocheng/894/37631a66c6004682abc4bdeb396c48ef.jpg)
我有一个MySQL数据库,其中包含带有组/属性的产品/
我创建了一个数据样本
http://sqlfiddle.com/#!2/7d8a04/1
create table products (
id int(10),
title varchar(50)
);
create table attributes (
id int(10),
title varchar(50)
);
create table filters (
id int(10),
attribute_id int(10),
title varchar(50)
);
create table product_filters (
id int(10),
product_id int(10),
attribute_id int(10),
filter_id int(10)
);
#products
insert into products select '1', '1stphone';
insert into products select '2', '2ndphone';
#attributes
insert into attributes select '1', 'ram';
insert into attributes select '2', 'cpu';
insert into attributes select '3', 'hdd';
#filters
insert into filters select '1', '1','128MB';
insert into filters select '2', '1','256MB';
insert into filters select '3', '2','1GHz';
insert into filters select '4', '2','2GHz';
insert into filters select '5', '3','16GB';
insert into filters select '6', '3','32GB';
#product_filters
insert into product_filters select '1','1','1','2';
insert into product_filters select '2','1','2','4';
insert into product_filters select '3','1','3','6';
insert into product_filters select '4','2','1','1';
insert into product_filters select '5','2','2','3';
insert into product_filters select '6','2','3','5';
所以我需要搜索该产品(或产品)有128MB或256MB RAM和32GB硬盘
如果您看到此链接http://sqlfiddle.com/#!2/7d8a04/1,则可以看到我的查询
但我不知道为什么它返回0行.
SELECT DISTINCT products.*
FROM products
JOIN product_filters ON product_filters.product_id=products.id
# where_ram_is_128MB_OR_256MB # it works !!
where ( product_filters.attribute_id=1 and product_filters.filter_id in (1,2) )
# and_where_hdd_is_32GB # not_works !!
AND ( product_filters.attribute_id=3 and product_filters.filter_id in (6) )
解决方法:
您需要为每个属性分别加入product_filters:
SELECT DISTINCT products.*
FROM products
JOIN product_filters AS f1 ON f1.product_id=products.id
JOIN product_filters AS f2 ON f2.product_id=products.id
WHERE ( f1.attribute_id=1 and f1.filter_id in (1,2) )
AND ( f2.attribute_id=3 and f2.filter_id in (6) )
您的版本尝试在product_filters中找到具有两个属性ID的单行,这是不可能的.
内容总结
以上是互联网集市为您收集整理的MySQL搜索产品及其属性全部内容,希望文章能够帮你解决MySQL搜索产品及其属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。