繁体   English   中英

根据多个AND WHERE条件检索多个记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM