2017-08-24 3 views
0

J'essaie de faire l'équivalent SQL d'une requête de jointure sur Firebase, sauf que je ne souhaite la joindre que si la clé privacy est égale à public.Firebase: Le filtrage des requêtes imbriquées ne fonctionne pas

Le code ci-dessous ne me retourne pas le résultat. Si je supprime child(key) alors cela fonctionne très bien, mais il ne sera pas rejoindre. J'aimerais vraiment de l'aide avec ça.

circleQuery?.observe(.keyEntered, with: { (key: String!, location: CLLocation!) in 

    self.locationRef.child(key).queryOrdered(byChild: "privacy").queryEqual(toValue : "public").observeSingleEvent(of: .value, with: { (locationSnapshot) in 
     if !locationSnapshot.exists() { return } 

     // returns no results 
    }) { (error) in 
     print(error.localizedDescription) 
    } 

}) 
+0

vous souhaitez interroger dans FirebaseDb et obtenir le résultat? –

+0

Oui. Autant que je comprends, pour exécuter l'équivalent SQL d'une déclaration de jointure, je devrais placer les clés des deux tables pour être équivalentes, ce que j'ai fait. Ce qui est différent ici, c'est que je veux conditionner la seconde requête, c'est-à-dire si la confidentialité est définie sur public. Cela a-t-il du sens? – dmr07

Répondre

0

pour poster et obtenir le résultat sur la base de la requête dans la méthode utilisation firebase suivant

let databaseReff = Database.database().reference().child("your parent node in which query will be searched and compared") 

       databaseReff.queryOrdered(byChild: "fromId // parameter whose value will be checked").queryEqual(toValue: self.requiredID //Parameter which will be compared).observe(.value, with: { snapshot in 
        if snapshot.exists(){ 

         print(snapshot.value!) //print full snapshot 
         if let snapDict:[String:AnyObject] = snapshot.value as? [String : AnyObject] { 

          let dictKeys = [String](snapDict.keys) 
          print(dictKeys) //print all the nodes that will satisfy your query 

         } 

        } 


       }) 
+0

À droite, mais j'effectue deux requêtes imbriquées et la deuxième requête dépend de la clé du premier. Oh et la deuxième requête n'est pas un tableau, mais est juste un élément. – dmr07

+0

Oui, vous pouvez le faire aussi, mais selon cela prendra du temps car vous allez frapper le serveur encore et encore, donc il est préférable d'obtenir un instantané sur la base d'une requête et ensuite utiliser cet instantané dans un [string: anyobject] dict et trier selon l'exigence, il va charger vos données rapidement que la première approche –

+0

J'ai eu requête usd dans la requête plus tôt, mais j'ai utilisé ma deuxième approche pour trier les données d'une requête. J'espère que ça aide –