2016-10-22 60 views
2

我做我的#2搜索,但我沒有找到我要找的如何在數據庫中搜索火力地堡

的解決方案,我想在數據庫火力點進行搜索,如果「名稱」等於在名稱導航標題,並在「電子郵件」該用戶使用,以簽到等於在數據庫中的電子郵件,然後它會避免用戶添加新項

JSON的看起來像這樣

"Items" : { 
     "-KUMSKLFqMjclbqygnPL" : { 
     "Item" : "asdfg" 
     "Name" : "Fadi」, 
     "User Email" : "[email protected]" 
     } 
    } 

我的代碼是

let databaseRef = FIRDatabase.database().reference() 

    var NAME : String! 
    var UserEmail : String! 
    var email : String! 

    databaseRef.child("Items").queryOrderedByKey().observe(.childAdded, with: { snapshot in 

     let snapshotValue = snapshot.value as? NSDictionary 
     NAME = (snapshotValue?["Name"] as? String)! 

     UserEmail = (snapshotValue?["User Email"] as? String)! 
     email = (FIRAuth.auth()?.currentUser?.email)! 

     if NAME == navigationItem.title { 

      if UserEmail == email { 
       print ("you can't add new item \(UserEmail)") 
      }else if UserEmail != email { 
       print("you can add new Item") 

      } 
     } 
    }) 

我的問題是如果存在名稱相同的Fadi但有兩個不同的電子郵件 其結果將是

you can't add new item Optional("[email protected]") 
you can add new Item 

應該只打印

you can't add new item Optional("[email protected]") 

我不知道如何打破它現在看起來像循環所有數據庫

更新

我嘗試德拉威答案

結果打印(snapShot.value):

"-KUMS7J-rCglHrVGX840" =  { 
    "Item" = "asdsd"    
    "Name" = "a"; 
    "User Email" = "[email protected]"; 
    }; 

結果是正確的!但現在我需要從該節點提取用戶電子郵件

+1

您已經表明您使用的是斯威夫特通過'快速'標籤。無需將其添加到標題中。 –

回答

4

如果你正在尋找發現其中有一個特定的名稱試試這個節點: -

let databaseRef = FIRDatabase.database().reference() 
    databaseRef.child("Items").queryOrdered(byChild: "Name").queryEqual(toValue: "Fadi").observeSingleEvent(of: .value, with: { (snapShot) in 

     if let snapDict = snapShot.value as? [String:AnyObject]{ 

       for each in snapDict{ 
         let key = each.key as! String 
         let name = each.value["Name"] as! String 
         print(key) 
         print(name) 
       } 
      } 
     }, withCancel: {(Err) in 

      print(Err.localizedDescription) 

    }) 
+0

法迪只是一個隨機名稱, 我再解釋一下它 是有一個表,它的細胞是A,B,C,d,F,G 並有許多用戶USER1 擁有電子郵件[email protected] 用戶2具有電子郵件[email protected] USER3具有電子郵件[email protected] 當他簽署USER1可以到g任何細胞添加項目,但他能爲每一個細胞 意味着如果他在新增項目一旦加入項目細胞中,該 ,然後嘗試再次添加項細胞中,它會顯示錯誤消息。 當用戶2在簽署他可以添加到每個細胞一次等類似USER1 所以一切都取決於該單元名稱和用戶的電子郵件 避免用戶增添了許多時間都! – Basil

+0

@Basil那是相當廣泛的,我已經給你的如何查詢用鑰匙分貝,快樂編碼:) – Dravidian

+0

只是可以肯定我解釋廣泛=),總之謝謝你,一個愉快的一天有=)一個基本思路 – Basil