使用 NSFetchRequest 查找每个用户最反感的条目

Posted

技术标签:

【中文标题】使用 NSFetchRequest 查找每个用户最反感的条目【英文标题】:Using NSFetchRequest to find each users most resent entries 【发布时间】:2014-07-06 02:53:09 【问题描述】:

我在 ios 上使用 CoreData 来存储 ping,每个条目都有 |userid、timestamp、outgoing|。

我想使用 NSFetchRequest 来获取每个用户最反感的“传出”条目(每个用户一个)

SQL 语法类似于

    SELECT * FROM 
      'Pings' AS P1 WHERE P1.out = 1 AND P1.timestamp = 
      (SELECT MAX(timestamp) FROM 
        Pings AS P2 HAVING 
        P1.userid = P2.userid AND P2.out = 1)

我似乎无法翻译到 NSPredicate 来工作

【问题讨论】:

【参考方案1】:

虽然 Core Data 可以使用 SQLite 作为数据存储,但它无法 100% 地利用 SQL 查询的功能和灵活性。如果您想考虑表和子查询,那么您应该直接使用 SQL。如果你想根据对象和关系来工作,那么你应该改变你的方法。

具体来说,当您添加新的传出 ping 时,将用户对象与其lastPing 对象的现有关系替换为刚刚创建的新 ping。现在,要查询项目,您只需查询您感兴趣的用户并从关系中读取 ping。

【讨论】:

感谢您的回复,实际上我最终在 Objective-C 中过滤了结果后查询,因为我知道该表不会包含超过几千行

以上是关于使用 NSFetchRequest 查找每个用户最反感的条目的主要内容,如果未能解决你的问题,请参考以下文章

NSFetchRequest 按月分组

NSFetchRequest 获取具有下一个最接近字符串属性的对象

NSFetchRequest 具有一对一关系属性 == YES 谓词错误地获取每个实体

特定月份和年份的 NSFetchRequest [重复]

调用返回多个集合时的 ​​NSFetchRequest

NSFetchRequest 在第一次运行时返回对象,但以后不返回