基于多个AND WHERE条件检索多个记录

时间:2009-11-23 11:27:12

标签: database mysql

我目前正在努力处理一个需要根据多个WHERE子句从我的表中检索多个记录的查询。每个WHERE子句都包含两个条件。

表格布局:

+--------------+---------+------+-----+---------+----------------+
| Field        | Type    | Null | Key | Default | Extra          |
+--------------+---------+------+-----+---------+----------------+
| id           | int(11) | NO   | PRI | NULL    | auto_increment |
| entity_id    | int(11) | YES  | MUL | NULL    |                |
| attribute_id | int(11) | YES  |     | NULL    |                |
| value        | int(11) | YES  |     | NULL    |                |
+--------------+---------+------+-----+---------+----------------+

我需要检索的内容:

一个或多个匹配attribute_id数组与相应值的记录。在这种情况下,我有一个具有以下结构的数组:

array(
   attribute => value,
   attribute => value,
   attribute => value
)

问题:

我不能遍历数组并为此查询创建WHERE子句,因为每个WHERE条件都会自动否定另一个。应匹配所有属性/值对。

我几乎以为我有这个查询的解决方案:

SELECT `client_entity_int`. * 
FROM `client_entity_int` 
WHERE (attribute_id IN (1, 3)) 
HAVING (value IN ('0', '3'))

...但显然,这将检索两个属性的两个值,其中我只需要属性1为0,属性3为3。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:3)

如果你使用OR,并不是每个WHERE子句都会否定另一个:)

例如:

WHERE (attribute_id = 1 and value = '0')
OR    (attribute_id = 3 and value = '3')

要坚持所有条件匹配,请计算匹配项:

WHERE    (attribute_id = 1 and value = '0')
OR       (attribute_id = 3 and value = '3')
GROUP BY entity_id 
HAVING   COUNT(*) = 2

答案 1 :(得分:2)

这听起来像是一个不同查询的联盟。

SELECT ... WHERE ...
UNION
SELECT ... WHERE ...
UNION
SELECT ... WHERE ...

答案 2 :(得分:1)

这会有用吗?:

SELECT `client_entity_int`. * 
FROM `client_entity_int` 
WHERE (attribute_id=1 AND value=0) OR (attribute_id=3 AND value=3)
...