[英]Retrieve multiple records based on multiple AND WHERE conditions
我目前正在努力处理一个查询,该查询需要基于多个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。
任何帮助,将不胜感激。
如果您使用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
这听起来像一个由不同查询组成的UNION。
SELECT ... WHERE ...
UNION
SELECT ... WHERE ...
UNION
SELECT ... WHERE ...
这行得通吗?:
SELECT `client_entity_int`. *
FROM `client_entity_int`
WHERE (attribute_id=1 AND value=0) OR (attribute_id=3 AND value=3)
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.