2016-12-06 1 views
0

В настоящее время я пытаюсь вернуть всех пользователей в моем представлении таблицы, которые имеют 3 атрибута, равные «art», «music» & «sports». Другие пользователи, у которых есть 3 атрибута, которые не равны этим 3 строкам, не будут отображаться в моем представлении таблицы. Как мне это достичь? На данный момент я могу проверить только, является ли атрибут ОДИН равен Одинарная строка, как в моем примере ниже. У меня есть изображение моего дерева базы данных ниже, а также код, который у меня есть. Любой ценит любую помощь. Спасибо!Как проверить, совпадают ли 3 или более значения в моей базе данных Firebase?

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

Один (основной, на мой взгляд) ограничение Firebase является невозможность фильтровать несколько ключей одновременно. Общая стратегия для этого состоит в том, чтобы отфильтровать ключ, который, по вашему мнению, даст вам самый маленький набор данных для работы с ним и отфильтровать остальные ключи на стороне клиента. Так, например, если вы считаете, что ваш текущий фильтр даст вам наименьший набор (или, если они все дают примерно то же самое), прежде чем добавить пользователя, проверьте:

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

Вы также можете фильтровать когда у вас есть все ваши пользователи. Но дело в том, что Firebase в настоящее время не разрешает такую ​​фильтрацию, поэтому вам нужно будет сделать это на стороне клиента.

self.users = self.users.filter({ $0.attribute2 == "music" && $0.attribute3 == "sports" }) 
Смежные вопросы