2015-07-20 5 views
0

Я использую Parse для управления моей базой данных.Анализ запроса множественного ключа swift в queryForTable()

У меня есть таблицаView с поисковым баром. Он работает очень хорошо.

Моя функция о запросе является следующее:

override func queryForTable() -> PFQuery { 
    var query = PFQuery(className: "students") 
    if searchBar.text != "" { 
     query.whereKey("prenom", containsString: searchBar.text.uppercaseString) 
    } 
    query.orderByAscending("prenom") 
    return query 
} 

Это работает очень хорошо.

Но теперь я хочу добавить несколько ключ в моих исследованиях, как:

query.whereKey("prenom", containsString: searchBar.text.uppercaseString) 
query.whereKey("nom", containsString: searchBar.text.uppercaseString) 

Но этот код, и это нормально, сделайте следующее: «Я хочу searchBar.text В Prénom и ПОВ» И это не то, что я хочу. Я хочу найти пример: «Джон», и этот результат должен быть «john» в «prenom» OR в «nom».

Я не знаю, как вернуть PFQuery с несколькими ключами в запрос.

Есть ли у кого-то идеи?

ответ

1

Чтобы выполнить запрос OR в Parse, вам необходимо использовать функциональность Compound Query. Вы создаете два независимых запроса, затем используйте метод orQueryWithSubqueries на PFQuery. Для примера ...

override func queryForTable() -> PFQuery { 
    var query: PFQuery! 
    if searchBar.text != "" { 
    var prenomQuery = PFQuery(className: "students") 
    var nomQuery = PFQuery(className: "students") 
    prenomQuery.whereKey("prenom", containsString: searchBar.text.uppercaseString) 
    nomQuery.whereKey("nom", containsString: searchBar.text.uppercaseString) 
    query = PFQuery.orQueryWithSubqueries([prenomQuery, nomQuery]) 
    } else { 
    query = PFQuery(className: "students") 
    } 
    query.orderByAscending("prenom") 
    return query 
} 

Я не помню, если набор результатов uniqued (позволяет сказать, что кто-то есть искомый текст в обоих их NOM и Prénom полей), так что вы должны проверить это.

+0

Это хорошо работает для того, что я прошу! И что, если я хочу искать несколько ключевых слов, например, я хочу искать «Sarah Crosh» (имя, фамилия)? Поэтому мне нужно создавать запросы для каждого слова ... – papay0

+0

Вам нужно добавить дополнительные ограничения, связанные с вашим запросом, так что что-то вроде 'query.whereKey (" firstname ", equalTo:" Sarah ")' и then 'query. whereKey ("lastname", equalTo: "Crosh") ' – rickerbh

0

Что я, наконец, сделал, это создать еще один столбец в моей таблице и объединить все доступные для поиска информацию.

Затем я делаю то же самое, я ищу свой поискBar.text в этом столбце, содержащий containsString.

Это работает почти отлично, единственная проблема, которую я нашел, - это если я хочу искать в обратном порядке строки в моем новом столбце.