在 Firebase 中,如何使用单独的 ORDER BY 进行 WHERE 查询
In Firebase how does one do a WHERE query with separate ORDER BY
使用 firebase 并尝试进行查询,在 SQL 中将是:
`SELECT * FROM definitions WHERE author='joe' ORDER BY votes DESC`
但是,为了在 firebase 中执行 equalTo
,您还必须指定要订购的字段。两者必须相同。真的没有办法做到这一点吗?
这可以做到 - 有点。
这是一组示例数据
definitions
-K2XaThTbq3iRnevjM4V
author: "joe"
votes: "5"
sort: "joe_005"
-K2XaThTbq3iRnevjM4W
author: "jay"
votes: "100"
sort: "jay_100"
-K2XaThTbq3iRnevjM4X
author: "joe"
votes: "22"
sort: "joe_022"
ObjC
Firebase *ref = [self.myRootRef childByAppendingPath:@"definitions"];
FQuery *q1 = [ref queryOrderedByChild:@"sort"];
FQuery *q2 = [q1 queryStartingAtValue:@"joe_"];
[q2 observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
NSLog(@"%@", snapshot.value);
}];
这将 return 所有 children 作者为 joe 的文章,按票数排序。
请记住,排序是对字符串值进行排序,因此 joe_5 会出现在 joe_22 之后(2 小于 5)。因此,为了补偿,用 0 填充投票,使字符串的数字部分长度相同。
如果有 1000 票,这将失败,所以只需用足够的 0 填充它即可补偿。
使用 firebase 并尝试进行查询,在 SQL 中将是:
`SELECT * FROM definitions WHERE author='joe' ORDER BY votes DESC`
但是,为了在 firebase 中执行 equalTo
,您还必须指定要订购的字段。两者必须相同。真的没有办法做到这一点吗?
这可以做到 - 有点。
这是一组示例数据
definitions
-K2XaThTbq3iRnevjM4V
author: "joe"
votes: "5"
sort: "joe_005"
-K2XaThTbq3iRnevjM4W
author: "jay"
votes: "100"
sort: "jay_100"
-K2XaThTbq3iRnevjM4X
author: "joe"
votes: "22"
sort: "joe_022"
ObjC
Firebase *ref = [self.myRootRef childByAppendingPath:@"definitions"];
FQuery *q1 = [ref queryOrderedByChild:@"sort"];
FQuery *q2 = [q1 queryStartingAtValue:@"joe_"];
[q2 observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
NSLog(@"%@", snapshot.value);
}];
这将 return 所有 children 作者为 joe 的文章,按票数排序。
请记住,排序是对字符串值进行排序,因此 joe_5 会出现在 joe_22 之后(2 小于 5)。因此,为了补偿,用 0 填充投票,使字符串的数字部分长度相同。
如果有 1000 票,这将失败,所以只需用足够的 0 填充它即可补偿。