2014-07-20 31 views
0

我有一个名为“匹配”的表。此表有几个字符串类型的列。 我试图创建一个查询字符串值“undefined”列“player2”查询。这没问题。当我查询只是我得到的结果。PFQuery约束 - 排除子查询

但我想添加一个约束,以便排除当前用户的facebook id与列“player1”相匹配的匹配对象。我已将该ID存储在PFUser对象中,以便我可以轻松地检索它。

我创建了一个随机玩家匹配系统,其中查询检查匹配表“player2”列中的一个空缺点。如果它是“未定义”,我知道比赛中有一个空位,球员可以加入。

但是它需要排除当前玩家以前开始自己的匹配。否则,它会加入当前玩家开始自己的比赛。

//check for objects that match the string "undefined" 
PFQuery *query1 = [PFQuery queryWithClassName:@"match"]; 
[query1 whereKey:@"player2" containsString:@"UNDEFINED"]; 

//AND constraint to exclude the match of query1 if the current user id matches 
PFQuery *query2 = [PFQuery queryWithClassName:@"match"]; 
[query2 whereKey:@"player1" notEqualTo:[[PFUser currentUser] [email protected]"fbId"]]; 


PFQuery *mainQuery = [PFQuery orQueryWithSubqueries:@[query1,query2]]; 
+0

请描述'匹配'表,它是什么类型的球员1和2列(是他们指向PFUsers?)。什么是'myClass'? – danh

+0

我试图详细解释我想要做的更多。第1列和第2列都是字符串。 “myClass”是我的错误。它也应该是“匹配”。 –

+0

好的,这有很大的帮助,但有一个重要的问题:这些球员队列是什么类型?指针或字符串?从你的描述看来,它们是字符串。如果是这样,那是我们需要解决的一个错误。 – danh

回答

1

您的player1和player2 cols是包含用户ID的字符串。我认为这会引起其他问题,但你仍然可以做你试图查询如下...

NSString *userId = [PFUser currentUser].objectId; 
NSPredicate *predicate = [NSPredicate predicateWithFormat: 
          @"(player1 = 'UNDEFINED') AND (player2 != %@)", userId]; 
PFQuery *query = [PFQuery queryWithClassName:@"match" predicate:predicate]; 

编辑 - 我改变上述fbId为用户的对象ID。这就是你可能存储在播放器字符串中。这种混淆使得存储字符串(而不是指针)成为设计的问题。

+0

的指针似乎更容易,因为这正是我一直在寻找的内容! –