我需要查詢幫助。我正在接受來自用戶的輸入,他們在1-100之間輸入範圍。所以它可能像30-40或66-99。然後,我需要一個查詢來從具有high_range和low_range的表中提取數據,以找到與其範圍內的任何數字匹配的數據。兩個範圍之間的MySQL查詢
因此,如果用戶做了30-40,並且該表有1-80,21-33,32-40,40-41,66-99和1-29的條目,它會發現除最後兩個在桌子裏。
什麼是最容易做到這一點的原因是什麼?
感謝
我需要查詢幫助。我正在接受來自用戶的輸入,他們在1-100之間輸入範圍。所以它可能像30-40或66-99。然後,我需要一個查詢來從具有high_range和low_range的表中提取數據,以找到與其範圍內的任何數字匹配的數據。兩個範圍之間的MySQL查詢
因此,如果用戶做了30-40,並且該表有1-80,21-33,32-40,40-41,66-99和1-29的條目,它會發現除最後兩個在桌子裏。
什麼是最容易做到這一點的原因是什麼?
感謝
我明白那是什麼範圍存儲以這種格式low-high
。如果是這樣的話,那麼這是一個糟糕的設計。我建議將這些值分成兩列:low
和high
。
如果你已經擁有的價值觀分裂,你可以用這樣的一些語句:
SELECT * FROM myTable WHERE low <= $needleHigherBound AND high >= $needleLowerBound
如果您有存儲在一個列中的值,並堅持他們留下的話,你可能會發現的MySQL SUBSTRING_INDEX
功能有用。但在這種情況下,您必須編寫一個複雜的查詢來解析所有行的所有值,然後將它們與您的搜索值進行比較。掩蓋設計缺陷似乎需要很多努力。
SELECT * FROM table WHERE ($low BETWEEN low_range AND high_range) OR ($high BETWEEN low_range AND high_range)
這是不正確的。如果$ low爲0,$ high爲100,那麼您的查詢將不會返回上表中的任何值(因爲$ low和$ high都不在這些範圍內)。你所描述的是包含用戶範圍的所有範圍的選擇,而不是所有與它相交的範圍。 – jcaron
SELECT * FROM table WHERE ID 30 and 40; – Farkie
@Farkie看起來你有正確的答案。 '選擇*從表WHERE(30至40之間的高範圍或30至40之間的低範圍)' – T3chn0crat
:)要我發佈爲正式答案嗎? – Farkie