2017-07-19 45 views
3

我想根據USER_ID檢索網站信息獲取USER_ID,我使用下面的查詢檢索網站信息如何從嵌套母火力

ref = Database.database().reference() 

     self.ref.child("sites").queryOrdered(byChild: "user_id").queryEqual(toValue:"DxMYXkVqnZMC6NEZxdSQF3G2ZJ53") 
      .observe(.childAdded, with: { snapshot in 

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


       } else { 
        print("found") 


       } 
      }) 

我可以打電話查詢,如果它的STORE_NAME,idToken等。但不能夠調用USER_ID,因爲它是一個childbuAutoid

enter image description here

回答

0

您可以創建新的價值聽衆裏面的「用戶」,然後相應地處理每一個孩子,或者你可以在孩子使用一個for循環迴路,像這樣:

for child in snapshot.childSnapshot(forPath: "users").children 
0

由於您的userID是嵌套的,因此您需要保持循環數據,這就是爲什麼它看起來很醜。看看下面的代碼,它應該工作。它只是循環查找值,直到找到user_id。有關圖片的更多信息,請參閱我的其他答案:https://stackoverflow.com/a/45143371/7715250它更清晰地說明了某件事的功能。

ref = Database.database().reference() 

     self.ref.child("sites").observe(.childAdded, with: { snapshot in 

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


       } else { 
       print("found") 
       let enumerator = snapshot.children 
       while let rest = enumerator.nextObject() as? FIRDataSnapshot { 
        if (rest as? DataSnapshot).key == "users"{ 
        let enumerator2 = (rest as? DataSnapshot).children 
        while let rest2 = enumerator2.nextObject() as? FIRDataSnapshot { 
        for userID in (rest2 as? DataSnapshot).children{ 
        let values = (userID as? DataSnapshot).value as? NSDictionary 
        let userId = values?["user_id"] as? String ?? "" 
         print(userId) 
      } 
     } 
    } 
    } 
} 
}) 
+0

其實它沒有進入「找不到」或「找到」 –

+0

@HaseenaPA我用ref做了一個小改動,它很奇怪它不打印任何東西。你有完整的許可? –

+0

@HaseenaPA你可以在我的答案中查看我提供的鏈接,它可以讓你知道如何循環訪問多個數據 –

0

如果你可以改變你的數據庫結構有點比你不必使用所有的循環。 您可以像下面的圖片一樣更改數據庫。 而不是使用自動生成的密鑰,您可以使用用戶ID作爲密鑰並將值設置爲任何你喜歡的。

enter image description here

現在你寫這樣的查詢。(對不起!此代碼段是在Java中,不知道 迅速,但是這會幫助你)。

dbr.child("sites").orderByChild("users/"+/*put user_id you want to search*/).equalTo("user_id").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      /*here you get the datasnapshot according to search*/ 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

嘗試更新您的代碼。

self.ref.child("sites").queryOrdered(byChild: "users/"+"DxMYXkVqnZMC6NEZxdSQF3G2ZJ53").queryEqual(toValue:"user_id") 
     .observe(.childAdded, with: { snapshot in 

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


      } else { 
       print("found") 


      } 
     }) 

希望這會對你有幫助。

+0

如果我們編輯當前的數據庫結構將很難處理它,是否有可能與當前結構相關 –

+0

是的,但您需要使用編碼完成此操作,獲取數據快照中的值,然後檢查user_id是否存在。 – Abhishek