所以,我有一個大致類似於這樣的mysql表,其中前兩列包含範圍。如何找到某個值在2個其他值之間的行?
1 , 5 , Value1
6 , 14 , Value2
14 , 18 , Value3
我如何可以查詢發現這行一定值介於(即,如果我有9個,則返回值2;如果我有2個,則返回值1)。這張桌子大約10MB,所以效率越高越好。
謝謝!
所以,我有一個大致類似於這樣的mysql表,其中前兩列包含範圍。如何找到某個值在2個其他值之間的行?
1 , 5 , Value1
6 , 14 , Value2
14 , 18 , Value3
我如何可以查詢發現這行一定值介於(即,如果我有9個,則返回值2;如果我有2個,則返回值1)。這張桌子大約10MB,所以效率越高越好。
謝謝!
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列。
where fielda >= 9 and fieldb <= 9
你的桌子上
select col3 from thetable where 2 between col1 and col2
你想在col1
和col2
組合索引此表現良好。
實際上它幾乎一樣madgnome的答案,但IMO有點清潔:
SELECT ... WHERE 9 BETWEEN min_value AND max_value;
除了清潔度之外,使用BETWEEN而不是> = AND <=還有什麼好處嗎? – timo 2010-10-06 12:41:20
如果所有參數都是相同類型,那麼這兩個表達式是等價的。 http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between – 2010-10-06 12:48:36
在9例如它需要返回值2 +值3? – 2010-10-06 12:35:22
糟糕。不,匆匆做了個例子。沒有重疊的情況。 – timo 2010-10-06 12:40:33