我目前正在努力处理一个需要根据多个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。
任何帮助都将不胜感激。
答案 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)
...