【问题标题】:MySQL search products with their attributesMySQL 搜索产品及其属性
【发布时间】:2014-12-15 06:03:02
【问题描述】:

我有一个 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 内存和 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) )

【问题讨论】:

    标签: mysql search entity-attribute-value


    【解决方案1】:

    您需要为每个属性单独加入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) )
    

    DEMO

    您的版本试图在 product_filters 中找到具有两个属性 ID 的单行,这是不可能的。

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 2011-10-22
      • 2014-08-26
      相关资源
      最近更新 更多