3

嗨,我对 MySQL 查询有疑问。

我有下表:

              product_properties             <-- table name
+------------------------------------------+    
|  id  |  property  |  value  | productid  | <-- field names
+------------------------------------------+
|   1  |  example   |    230  |         3  | +-- rows
|   2  |  power     |    110  |         3  | |
|   3  |  voltage   |    1.2  |         4  | |
|   4  |  example   |    240  |         4  | |
|   5  |  example   |    320  |         6  | |
|   6  |  power     |    100  |         4  | |
|   7  |  power     |    110  |         6  | +
+------------------------------------------+

我想创建一个过滤器查询。例如:

想查看与“230”匹配的“示例”的所有产品。这将返回一项,我使用的是:

SELECT * FROM product_properties WHERE property='example' AND value='230';

这很容易,但现在我想展示所有与“230”匹配的“示例”和与“110”匹配的“电源”的产品。

我尝试了以下方法:

SELECT * FROM product_properties WHERE property='example' AND value='230' AND property='power' AND value='110';

SELECT * FROM product_properties WHERE property='example' AND value='230' OR property='power' AND value='110';

第一个查询的问题是,它将返回空,我明白了。第二个查询的问题是,它还返回具有属性“示例 230,240,320”的产品。

我的问题是最好的使用方法是什么,或者我不应该创建一个动态产品属性表吗?

4

2 回答 2

3

您必须过滤其中一个或(因为两种情况都不能匹配 1 条记录),然后找到两者都与having子句匹配的属性

SELECT product_id 
FROM product_properties 
WHERE property='example' AND value='230' 
OR property='power' AND value='110'
group by product_id
having count(distinct property) = 2
于 2013-01-07T22:41:40.600 回答
0

尝试:

SELECT *
  FROM product_properties
 WHERE ( property='example' AND value='230' )
   OR  ( property='power' AND value='110' );
于 2013-01-07T22:40:41.693 回答