Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询多行上的WHERE和and_Mysql - Fatal编程技术网

MySQL查询多行上的WHERE和and

MySQL查询多行上的WHERE和and,mysql,Mysql,嗨,我有一个关于MySQL查询的问题 我有下表: product_properties <-- table name +------------------------------------------+ | id | property | value | productid | <-- field names +------------------------------------------+ |

嗨,我有一个关于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'匹配的'example'和与'110'匹配的'power'产品

我尝试了以下方法:

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';
第一个查询的问题是,它将返回空,我明白了。 第二个查询的问题是,它还返回属性为“example 230240320”的产品

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

试试:

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

您必须筛选(因为这两种情况都不能匹配一条记录),然后查找两者都与
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
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