2016-12-06 6 views
0

私は現在、 "アート"、 "音楽" & "スポーツ"に等しい3つの属性を持つすべてのユーザーをテーブルビューで返そうとしています。これらの3つの文字列と等しくない3つの属性を持つ他のユーザーは、私のテーブルビューに表示されません。これをどのように達成するのですか?現時点では、ONEの属性がONEの文字列に等しいかどうかを確認することができます。下のデータベースツリーのイメージと、現在持っているコードがあります。どなたでも助けてください。ありがとうございました! FirebaseのFirebaseデータベースで3つ以上の値が同じであることを確認するにはどうすればよいですか?

enter image description here

class User: NSObject { 

    var name: String? 
    var email: String? 
    var numberId: String? 

    var attribute1: String? 
    var attribute2: String? 
    var attribute3: String? 

    var password: String? 
    var profileImageUrl: String? 
} 

func fetchUser() { 

     FIRDatabase.database().reference().child("users").queryOrdered(byChild: "attribute1").queryEqual(toValue: "art").observe(.childAdded, with: { (snapshot) in 

      if let dictionary = snapshot.value as? [String: AnyObject] { 
       let user = User() 

       user.setValuesForKeys(dictionary) 

       self.users.append(user) 

       DispatchQueue.main.async(execute: { 
        self.tableView.reloadData() 
       }) 
      } 

     }, withCancel: nil) 
    } 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! UserCell 

     let user = users[indexPath.row] 
     cell.textLabel?.text = user.name 
     cell .detailTextLabel?.text = user.email 

     if let profileImageUrl = user.profileImageUrl { 

      cell.profileImageView.loadImageUsingCachWithUrlString(urlString: profileImageUrl) 
     } 

     return cell 
    } 

答えて

2

ワン(メジャー、私の意見では)制限一度に複数のキーによってフィルタリングすることができない点です。これを行うための一般的な戦略は、作業する最小のデータセットを提供すると考えられるキーでフィルタリングし、クライアント側の残りのキーでフィルタすることです。だから、あなたが考える場合、たとえば、あなたの現在のフィルタを使用すると、最小のセットを提供します(または、それらはすべて同じ程度あげる場合)、ユーザーを追加する前に、確認してください。

if user.attribute2 == "music" && user.attribute3 == "sports" { 
    self.users.append(user) 
} 

をまたあなたにフィルタをかけることができすべてのユーザーがいればリストに登録してください。しかし、Firebaseはこの種のフィルタリングを現在許可していませんので、クライアント側で行う必要があります。

self.users = self.users.filter({ $0.attribute2 == "music" && $0.attribute3 == "sports" }) 
関連する問題