我是数据库新手,但我觉得我想做的事情应该很常见......
我想要实现的是允许用户对我的网站为他们获取的结果应用价格范围过滤器和价格排序。所以我想找到指定价格范围内的所有价格,然后按价格排序。
我有一个在 Heroku 上运行的 Hasura DB。数据库有两个表,seeds
并且prices
. 表中的一行seeds
,即一个种子,可以与prices
表中的多行,即多个价格相关联。它们由外键约束和一对多关系或对象到数组连接。
我正在尝试seeds
使用以下 GraphQL 查询进行查询:
{
seeds(
where: {prices: {price: {_gte: "10", _lte: "200"}}},
order_by: {prices_aggregate: {min: {price: asc_nulls_last}}}
) {
product_name
prices {
price
}
}
}
我想要这个查询做的是过滤掉所有prices.price
不在有效范围内的(10, 200)
东西,然后prices.price
按升序对它们进行排序。然而,结果是通过prices.price
升序排列不在范围内的 INCLUDING 值,然后过滤结果。
我将举一个例子来澄清。考虑上述查询的以下结果:
{
"data": {
"seeds": [
{
"product_name": "Northern Lights Auto Feminised Seeds",
"prices": [
{
"price": 3.48
},
{
"price": 6.79
},
{
"price": 9.58
},
{
"price": 104.5
}
]
},
{
"product_name": "The White OG Feminised Seeds",
"prices": [
{
"price": 3.48
},
{
"price": 6.79
},
{
"price": 15.68
}
]
},
{
"product_name": "Special Kush #1 Feminised Seeds from Royal Queen Seeds",
"prices": [
{
"price": 3.49
},
{
"price": 13.53
},
{
"price": 8.29
}
]
}
]
}
}
prices.price
上面的结果是正确的,因为在分别指定的范围内都有有效的值(104.5, 15.68, 13.53)
,但是结果的顺序不正确。相反,它们按最低排序price.prices
,而与指定的过滤器无关(10, 200)
。
结果的正确顺序是:
{
"data": {
"seeds": [
{
"product_name": "Special Kush #1 Feminised Seeds from Royal Queen Seeds",
"prices": [
{
"price": 3.49
},
{
"price": 13.53
},
{
"price": 8.29
}
]
},
{
"product_name": "The White OG Feminised Seeds",
"prices": [
{
"price": 3.48
},
{
"price": 6.79
},
{
"price": 15.68
}
]
},
{
"product_name": "Northern Lights Auto Feminised Seeds",
"prices": [
{
"price": 3.48
},
{
"price": 6.79
},
{
"price": 9.58
},
{
"price": 104.5
}
]
}
]
}
}
谁能帮助我,并解释我如何才能达到这些正确的结果?值得一提的是,查询后无法对结果进行排序,因为有数千个,排序肯定会影响从数据库返回的结果。
提前致谢!