我目前需要基於多個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