2015-01-12 2 views
0

в основном я хочу сделать что-то похожее наParse - сложные запросы с OR и AND?

SELECT * FROM FriendRequests WHERE (from == user OR to == user) AND status = "accepted" 

Существует метод, называемый orQueryWithSubqueries, который позволяет мне объединить два ПРС, но я не могу понять, как выполнить и между ними и запросом статуса.

let statusCheck = FriendRequest.query() 
statusCheck.whereKey("status", equalTo: FriendRequest.Status.Accepted.rawValue) 

let userCheckOne = FriendRequest.query() 
userCheckOne.whereKey("from", equalTo: User.currentUser()) 

let userCheckTwo = FriendRequest.query() 
userCheckOne.whereKey("to", equalTo: User.currentUser()) 

let userCheck = PFQuery.orQueryWithSubqueries([userCheckOne, userCheckTwo]) 

// Some how do (userCheck AND statusCheck) 
+0

Привет Мне любопытно о FriendRequest. Status.Accepted.rawValue, это что-то в вашем коде или в таблице анализа или обоим? У меня такой же вопрос, если вы можете уточнить, что было бы здорово! @aryaxt – kareem

+0

@kareem Это просто переименование. Значения в parse хранятся в виде строки, а на клиенте у меня есть перечисление Named Status внутри класса с именемFriendRequest. Вероятно, можно было бы упростить .Accepted.rawValue – aryaxt

ответ

3

Если вы пришли на него с углом SQL, подумайте о OR запроса более как UNION заявление.

Ваш запрос будет выглядеть так:

SELECT * 
FROM FriendRequests 
WHERE from = user 
AND status = "accepted" 

UNION 

SELECT * 
FROM FriendRequests 
WHERE to = user 
AND status = "accepted" 

Как вы можете видеть, что решение просто добавить AND часть в обоих запросах:

let userCheckOne = FriendRequest.query() 
userCheckOne.whereKey("from", equalTo: User.currentUser()) 
userCheckOne.whereKey("status", equalTo: FriendRequest.Status.Accepted.rawValue) 

let userCheckTwo = FriendRequest.query() 
userCheckTwo.whereKey("to", equalTo: User.currentUser()) 
userCheckTwo.whereKey("status", equalTo: FriendRequest.Status.Accepted.rawValue) 

let userCheck = PFQuery.orQueryWithSubqueries([userCheckOne, userCheckTwo]) 
+0

Оооо получил его. Я узнал, что также можно использовать Predicate. Попробует и вернусь. Удивительно, работает ли следующий предикат «status ==% @ AND (from ==% @ OR до ==% @)» – aryaxt

+0

Это хороший ответ, и предикат тоже должен работать. – danh

+0

Как использовать предикат? с парсером. Просьба привести пример – Charmi

Смежные вопросы