首页 > 解决方案 > Hasura:如何按用户指定的范围过滤,其中数据包含范围

问题描述

在数据库中,有 41.0、41.5-42、42-43 等尺码的鞋子。我将它们保存为:

41.0 -> shoes_min=41.0; shoes_max=41.0
41.5-42 -> shoes_min=41.5; shoes_max=42.0
42-43 -> shoes_min=42.0; shoes_max=43.0

我建议的过滤器以用户可能的方式显示上述所有示例(在前端只有 2 个输入值 (41, 42),表示用户感兴趣的范围。它应该匹配所有上述 3示例,但在我的情况下,它与条目不匹配shoes_min=42; shoes_max=43

query MyQuery {
  models(
    where: {
      shoes_min: {_gte: "41"}
      _and: {
        shoes_min: {_lte: "42"}
      },
      _or: {
        shoes_max: {_gte: "41"}
        _and: {
          shoes_max: {_lte: "42"}
        },
      },
    },
    order_by: {shoes_max: asc}
  ) {
    shoes_min
    shoes_max
    name
    url
  }
}

标签: filtergraphqlrangehasura

解决方案


这是正确的请求正文:

query MyQuery {
  models(
    where: {
      _or: [
        {_and: [{shoes_min: {_gte: 41}}, {shoes_min: {_lte: 42}}]},
        {_and: [{shoes_max: {_gte: 41}}, {shoes_max: {_lte: 42}}]}
      ]
    },
    order_by: [{shoes_min: asc}, {shoes_max: asc}]
  ) {
    shoes_min
    shoes_max
    name
  }
}

推荐阅读