2011-02-11 70 views
1

我有一個表'商品'與3列(id,名稱,價格)。我需要通過ID列表和價格範圍獲取數據。結合WHERE和IN子句與兩個字段

我使用這個查詢:當我使用嚴格的價格值

SELECT id, name, price FROM goods 
WHERE (id, price) 
IN ((1,10), (3,20), (2,10)) 
ORDER BY FIELD(id, 1,3,2) 

一切就好了。

其實,我需要做的查詢,如:

SELECT id, name, price FROM goods 
WHERE (id, price) 
IN ((1, BETWEEN 0 AND 100), (2, BETWEEN 50 AND 150), (n, BETWEEN m AND k)) 
ORDER BY FIELD(id, 1,3,n) 

我發現表達(1, BETWEEN 0 AND 100)永遠不會返回結果,我需要,而(1,10)意志。

我肯定可以通過價格範圍在PHP中排除記錄,但我試圖找到更有效的方式來做到這一點在MySQL查詢使用索引。我該怎麼辦?

回答

4

你不能像那樣使用BETWEEN。試着改變你的表達了一系列的OR代替:

SELECT id, name, price 
FROM goods 
WHERE 
    (id = 1 AND price BETWEEN 0 AND 100) OR 
    (id = 2 AND price BETWEEN 50 AND 150) OR 
    (id = n AND price BETWEEN m AND k) 
ORDER BY FIELD(id, 1,3, n) 
+0

我需要從1到50 coditions使用像'(ID = 1,價格介於0和100)` - 將它提高查詢很多時間(甚至在字段`id,price`上使用索引)? – aintghost 2011-02-11 23:02:11