Firebase间隔组合查询

时间:2017-05-14 01:50:15

标签: android firebase firebase-realtime-database nosql

我的firebase数据库结构如下:

-users
    -[userID from the account]
        -[interval key generated automatically with push]
            -start: timestamp
            -end: timestamp
            -color: black
        -[interval key]
            -start: timestamp
            -end: timestamp
            -color: red
        -[interval key]
            -start: timestamp
            -end: timestamp
            -color: green
    -[userID2 from the account]
        -[interval key]
            -start: timestamp
            -end: timestamp
            -color: black
        -[interval key]
            -start: timestamp
            -end: timestamp
            -color: white
        -[interval key]
            -start: timestamp
            -end: timestamp
            -color: red

使用android我不明白如何进行一些组合查询。

如果我有:

long start = 1494637200000;
long end =   1494640800000;

DatabaseReference userRef = dbRef.child("users").child(uid);

如果我不能使用orderByChild()超过1次:

1)如何从数据库中获取与startend重叠的所有间隔?

Sql:

select * from [userID] where start + " < " + 1494640800000 + " AND " + end + " > " + 1494637200000

2)如何从数据库中获取与startend重叠的所有间隔,但只能使用颜色“black”?

Sql:

select * from [userID] where start + " < " + 1494640800000 + " AND " + end + " > " + 1494637200000 AND color = "black"

(我接受不同语言的答案,只是让它变得可以理解)

1 个答案:

答案 0 :(得分:1)

在开始创建这些查询之前,我建议你看一下名为The Firebase Database For SQL Developers的教程。您将了解实现您想要的确切方法的确切方法。

要转换如下所述的值,请使用以下代码:

String firebaseField = "1494637200000_1494640800000_black";
ArrayList<String> arrayList = new ArrayList<>();

String[] data = firebaseField.split("_");
for(String part : data) {
    arrayList.add(part);
}

long start = Long.valueOf(arrayList.get(0));
long end = Long.valueOf(arrayList.get(1));
String color = arrayList.get(2);

if(yourStartValue < start && yourEndValue > end && color.equals("black")) {
    //Your logic here
}

希望它有所帮助。