2017-05-14 3 views
1

Ich habe eine Datenbank aufgebaut, wie Feuerbasis:Firebase Intervall kombinierte Abfrage

-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 

mit Android Ich verstehe nicht, wie einige kombinierte Abfrage zu machen.

Wenn ich habe:

long start = 1494637200000; 
long end = 1494640800000; 

und:

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

Wenn ich nicht orderByChild() mehr als 1 Mal verwenden:

1) Wie kann ich von der get Datenbank alle Intervalle, die mit dem start und dem end überlappen?

Sql:

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

2) Wie kann ich aus der Datenbank erhalten alle Intervalle, die mit dem start und der end überlappen, sondern nur mit der Farbe „black“?

Sql:

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

(Ich nehme Antworten in verschiedenen Sprachen, nur um es verständlich machen)

Antwort

1

Vor Beginn jene Abfrage Ich schlage vor, Sie dieses Tutorial sehen erstellen genannt: The Firebase Database For SQL Developers. Sie lernen genau, wie Sie genau das erreichen können, was Sie wollen.

Wert zu konvertieren, wie unten erwähnt, verwenden Sie bitte diesen Code:

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 
} 

Hoffe, es hilft.

+0

Ich habe dieses Tutorial schon einmal gesehen, die einzige Methode, um von 2-3 Kindern abzufragen, sie in einem Wert getrennt durch ein Sonderzeichen zu kombinieren. Es ist der einzige Weg ? – 4bottiglie

+0

Ja, das ist richtig. Dies ist eine gängige Praxis in Firebase. –

+0

Wenn ich sie nach einer gewissen Zeit durch andere 3 Parameter abfragen möchte, sollte ich alle Intervalle mit einem neuen Wert aktualisieren? Ist es Ihrer Meinung nach teurer, sie bei jedem Kunden einzeln zu filtern? – 4bottiglie