NSPredicate 复杂查询

Posted

技术标签:

【中文标题】NSPredicate 复杂查询【英文标题】:NSPredicate complex query 【发布时间】:2014-06-27 15:11:20 【问题描述】:

我有一个复杂的NSPredicate 问题,我无法解决。

我的数据结构如下:

类别 - 有很多标题

标题 - 有很多产品

Title - 具有 latestProduct 属性 (title.latestProduct)

可以通过排除属性排除标题 (title.excluded = YES) 可以通过排除属性排除产品 (product.excluded = YES)

我正在寻找的结果:我需要获取系统中所有类别的列表,但是我想排除以下类别:

排除所有类别标题(category.titles.excluded == YES)

排除所有最新产品 (category.titles.latestProduct.excluded == YES)

或者(这对我来说是最困难的部分)

(category.titles.excluded == YES) 的计数和 (category.titles.latestProduct.excluded == YES) 的计数之和等于类别标题的计数 (category.titles.count)

我可以用简单的英语描述我的问题,但无法找到将其格式化为谓词的正确方法。任何帮助将不胜感激!

【问题讨论】:

我会使用子查询(检查:***.com/questions/9803971/…) 我建议你用块做一个谓词,因为在块内你可以轻松快速地创建这样复杂的查询。 不幸的是,块不能与核心数据获取查询一起使用。至于子查询 - 我一直在使用它们,但不幸的是我不知道如何为查询的最后部分添加 2 个计数 @Mamela,谁说它不起作用?我没有使用其他任何东西,而是使用基于块的 CoreData 谓词;但是,我一直本着 CoreData 的精神建立数据库,所以我从来没有遇到过问题。根据您的帖子,您可以在数据库的情况下做同样的事情。如果我对您的实体有更多了解,我会为您创建基于块的请求作为答案。 【参考方案1】:

所以我终于找到了结合使用 ANY 子句和子查询的方法。谓词如下:

ANY productTitles.excluded == nil && SUBQUERY(productTitles, $x, SUBQUERY($x.products, $y, $y.excluded == nil).@count != 0 ).@count != 0

我认为子查询基本上是“ANY”子句的工作方式,但我不知道如何为子查询的子查询执行 ANY 子句。

【讨论】:

以上是关于NSPredicate 复杂查询的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate:与日期iOS的to-Many关系

子查询中的 NSPredicate

mysql复杂查询

NSPredicate == 查询

SQL之复杂查询与视图

一个复杂查询与多个简单查询