gpt4 book ai didi

ios - doesNotMatchKey :inQuery: return records that match key in Parse SDK for iOS

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:10 26 4
gpt4 key购买 nike

我正在尝试使用 Parse SDK 在 xcode 中执行一个简单的查询,我正在向用户展示产品,但我不想向他们展示他们已经“喜欢”的产品。

所以我在 Parse 中使用了两个表:
- 产品:有一个 objectId
- 喜欢:包含列:喜欢(说是/否)、产品指针、用户指针

我的代码是:

//query will get products that the user has liked
PFQuery *likeQuery = [PFQuery queryWithClassName:@"Likes"];
[likeQuery whereKey:@"User_Obj" equalTo:[PFUser currentUser]];

//product query will get products that are not in like query
PFQuery *prodQuery = [PFQuery queryWithClassName:@"Products"];
[prodQuery whereKey:@"objectID" doesNotMatchKey:@"Product" inQuery:likeQuery];

//restrict to 10 items
[prodQuery setLimit:10];
[prodQuery findObjectsInBackgroundWithTarget:self
selector:@selector(getCallback:error:)];

但是,当我尝试运行该用户之前喜欢的项目时,该用户正在返回。

如果我在 SQL 中这样做,我会这样写:

SELECT product FROM product WHERE product NOT IN (SELECT product FROM likes WHERE useriD = currentUser AND like = yes)

如有任何帮助,我们将不胜感激!

谢谢,提姆

最佳答案

使用 Parse 和其他 NoSQL 服务时,您需要摆脱 SQL 思维模式(使用规范化等)。 NoSQL“模式”更关注查询效率而不是存储和一致性。正如 Petro 所建议的那样,您可以将所有喜欢的内容存储在用户表中的数组中。然后,您可以使用约束条件查询 Parse,声明记录不应与查询中的任何 objectid 匹配,如下所示:

[query whereKey:@"objectId" notContainedIn:user.productLikes];

其中 productLikes 是产品 ID 数组。

另一个解决方案是将喜欢的产品存储在不同的表中,但仍然作为一个数组(不是每个喜欢的单独记录,带有指向产品和用户的指针,就像您使用 SQL 数据库所做的那样)。在这种情况下,您可以像在问题中一样嵌套查询。

关于ios - doesNotMatchKey :inQuery: return records that match key in Parse SDK for iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21519862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com