我目前需要基于多个WHERE子句从我的表检索多个记录的查询挣扎。每个WHERE子句包含两个条件。检索基于多个AND 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
任何帮助,将不胜感激。
可悲的是,我需要所有有条件的地方是真实的,所以这是行不通的。 – 2009-11-23 11:59:19
@Aron Rotteveel:所以,只需使用'AND'而不是'OR'。或者我错过了什么? – Andomar 2009-11-23 12:18:39
这是行不通的。当attribute_id = 1的第一个子句返回true时,很明显,attribute_id = 3的第二个子句不再返回true。 – 2009-11-23 12:23:25