2016-10-22 45 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