2010-10-06 18 views
0

所以,我有一個大致類似於這樣的mysql表,其中前兩列包含範圍。如何找到某個值在2個其他值之間的行?

1 , 5 , Value1 
6 , 14 , Value2 
14 , 18 , Value3 

我如何可以查詢發現這行一定值介於(即,如果我有9個,則返回值2;如果我有2個,則返回值1)。這張桌子大約10MB,所以效率越高越好。

謝謝!

+0

在9例如它需要返回值2 +值3? – 2010-10-06 12:35:22

+0

糟糕。不,匆匆做了個例子。沒有重疊的情況。 – timo 2010-10-06 12:40:33

回答

1
SELECT 
    val 
FROM 
    table 
WHERE 
    table.range_min <= 9 
    AND table.range_max >= 9 
    /* OR 9 BETWEEN table.range_min AND table.range_max*/ 

添加包含這2個領域的指數爲提高效率添加索引range_min和range_max列。

0
where fielda >= 9 and fieldb <= 9 

你的桌子上

0
select col3 from thetable where 2 between col1 and col2 

你想在col1col2組合索引此表現良好。

2

實際上它幾乎一樣madgnome的答案,但IMO有點清潔:

SELECT ... WHERE 9 BETWEEN min_value AND max_value; 
+0

除了清潔度之外,使用BETWEEN而不是> = AND <=還有什麼好處嗎? – timo 2010-10-06 12:41:20

+0

如果所有參數都是相同類型,那麼這兩個表達式是等價的。 http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between – 2010-10-06 12:48:36

相關問題