我需要查询帮助。我正在从用户那里获取输入,他们输入的范围在1-100之间。所以它可能像30-40或66-99。然后我需要一个查询来从具有high_range和low_range的表中提取数据,以找到与其范围内任何数字匹配的数据。
因此,如果一个用户做了30-40并且该表具有1-80,21-33,32-40,40-41,66-99和1-29的条目,它将找到除了最后两个之外的所有条目桌子。
最简单的原因是什么?
由于
答案 0 :(得分:1)
如果我理解正确(即您希望任何范围与用户输入的范围重叠),我会说:
SELECT * FROM table WHERE low <= $high AND high >= $low
答案 1 :(得分:0)
我理解的是,范围以low-high
格式存储。如果是这种情况,那么这是一个糟糕的设计。我建议将值拆分为两列:low
和high
。
如果您已经拆分了值,则可以使用以下语句:
SELECT * FROM myTable WHERE low <= $needleHigherBound AND high >= $needleLowerBound
如果您将值存储在一列中,并坚持它们保持不变,您可能会发现MySQL的SUBSTRING_INDEX
函数很有用。但在这种情况下,您必须编写一个复杂的查询来解析所有行的所有值,然后将它们与您的搜索值进行比较。掩盖设计缺陷似乎需要付出很多努力。