2016-04-07 1 views
1

Ich bin mir fast sicher, dass meine Frage keine Lösung mit nur Firebase hat, aber lass mich es versuchen. Ich muss einen spezifischen Knoten bekommen, der es durch einen anderen Wert bestellt, besser erklärend: Ich muss alle Kinder "empregado" bekommen, die sie durch "Daten" bestellen. Diese meine Daten:Firebase gleich eine Eigenschaft und Bestellung von einem anderen

"ponto" : { 
"-KEggOdWvibrLfpptyfX" : { 
    "data" : "04/04/2016", 
    "empregado" : "-KEHl6qtSG7UkZU8Gi4t", 
    "entradaM" : "07:03", 
    "entradaT" : "12:01", 
    "equipe" : "-KDYYDYMqc0l0irnOGjP", 
    "horas" : "09:00", 
    "horas100" : "", 
    "horas50" : "", 
    "obra" : "-KDcuiLXj8IgVB5RalLS", 
    "observacao" : "tsts", 
    "saidaM" : "11:01", 
    "saidaT" : "17:00" 
}, 
"-KEggYHd7bBkv04XSx2C" : { 
    "data" : "05/04/2016", 
    "empregado" : "-KEHl6qtSG7UkZU8Gi4t", 
    "entradaM" : "07:01", 
    "entradaT" : "12:02", 
    "equipe" : "-KDYYDYMqc0l0irnOGjP", 
    "horas" : "09:00", 
    "horas100" : "", 
    "horas50" : "01:00", 
    "obra" : "-KDcuiLXj8IgVB5RalLS", 
    "observacao" : "tsts", 
    "saidaM" : "11:01", 
    "saidaT" : "18:00" 
},...more data with repeated key "empregado" and not repeated too 

Also, ich tat:

ref.child("ponto").orderByChild("empregado").equalTo("-KEHl6qtSG7UkZU8Gi4t").on("child_added", function(snapshot) { 
         ponto = snapshot.val();}); 

und perfekt bekam ich die Daten, aber ich brauche es von Kind „Daten“ zu bestellen, so dachte ich, das könnte durch etwas wie das gelöst:

ref.child("ponto").orderByChild("data").orderByChild("empregado").equalTo("-KEHl6qtSG7UkZU8Gi4t").on("child_added", function(snapshot) { 
         ponto = snapshot.val();}); 

aber es sagt, dass ich nicht zweimal verwenden kann „orderByChild“ Ideen ??? Danke seit jetzt.

+0

Siehe http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase –

Antwort

0

Sie sind richtig, Ihre BestellungByChild definiert, welches Feld Sie abfragen, so dass es nicht zweimal verwendet werden kann.

Auch Daten wie 2016.04.04 verwendet, kann später mit Sortierung ein Problem werden, so dass Sie sie als 20160404.

Ihre Entwicklungsplattform ist nicht angegeben speichern möchten aber die Daten geladen werden in und im Code ziemlich leicht geordnet.

Als Lösung können Sie einen kombinierten Index

"-KEggOdWvibrLfpptyfX" : { 
    "data" : "04/04/2016", 
    "empregado" : "-KEHl6qtSG7UkZU8Gi4t", 
    "entradaM" : "07:03", 
    "entradaT" : "12:01", 
    "equipe" : "-KDYYDYMqc0l0irnOGjP" 
    "id_date_index": "-KDYYDYMqc0l0irnOGjP_20160404" 
}, 
"-KEggYHd7bBkv04XSx2C" : { 
    "data" : "05/04/2016", 
    "empregado" : "-KEHl6qtSG7UkZU8Gi4t", 
    "entradaM" : "07:01", 
    "entradaT" : "12:02", 
    "equipe" : "-KDYYDYMqc0l0irnOGjP" 
    "id_date_index": "-KDYYDYMqc0l0irnOGjP_20160504" 
} 

dann Ihre Anfrage

ref.queryOrderedByChild("id_date_index").queryStartingAtValue("-KDYYDYMqc0l0irnOGjP_0") 
     .observeEventType(.ChildAdded, withBlock: { snapshot in 

     if (snapshot.value is NSNull) { 
      print("not found)") 

     } else { 
      print(snapshot.value) 
     } 

    }) 

Das Konzept ist hier wäre zu nutzen, dass wir wissen, was wir für, abfragen möchten in diesem die Der Fall ist "-KDYYDYMqc0l0irnOGjP_0", also ist das statisch.

Die Variable ist das Datum so basteln wir ein Index, der die statische mit dem variablen

static_variable

kombiniert Da die Variable numerisch ist und können wir unsere Abfrage bei Null mit queryStartingAt sein sequenziellen Start:

-KDYYDYMqc0l0irnOGjP_0

, die dann alle gewünschten Knoten abruft und sie sequenziell sortiert.

+0

Vielen Dank Frank – Jorgeley