Hasura:数据存储为min-max区间字段时如何按用户输入区间筛选
核心匹配逻辑
两个区间存在重叠的充要条件为:数据库存储的鞋款尺码区间左边界 ≤ 用户输入的区间右边界,且数据库存储的鞋款尺码区间右边界 ≥ 用户输入的区间左边界。
正确Hasura查询代码
query MyQuery { models( where: { _and: [ { shoes_min: { _lte: "42" } }, { shoes_max: { _gte: "41" } } ] }, order_by: {shoes_max: asc} ) { shoes_min shoes_max name url } }
如果需要动态传入用户输入的区间值,把42和41替换为GraphQL变量即可。
匹配验证(以用户输入区间(41,42)为例)
- 尺码41.0:
shoes_min=41 ≤ 42,shoes_max=41 ≥ 41→ 匹配 - 尺码41.5-42:
shoes_min=41.5 ≤ 42,shoes_max=42 ≥ 41→ 匹配 - 尺码42-43:
shoes_min=42 ≤ 42,shoes_max=43 ≥ 41→ 匹配
原查询错误原因
原查询逻辑限制了要么shoes_min落在用户输入区间内,要么shoes_max落在用户输入区间内,漏掉了数据库区间一端刚好卡在用户区间边界、另一端超出的场景,因此无法匹配42-43这类条目。
内容的提问来源于stack exchange,提问作者dnk8n
相关产品推荐
相关产品推荐

