Iphone 如何在核心数据中进行MySQL查询?

Iphone 如何在核心数据中进行MySQL查询?,iphone,mysql,sqlite,core-data,Iphone,Mysql,Sqlite,Core Data,我将如何在核心数据中执行此语句的等效操作?基本上,我想得到一个关于foo发生次数最多的10个列表,包括它发生的次数 基本上,我将所有用户搜索记录为核心数据中的单个条目。我希望能够选择他们搜索最多的10个项目,并以最流行的开始顺序显示它们。所以基本上我想要的是: Baa | 10 海| 8 方框| 6 等等 谢谢你能提供的帮助。我对核心数据还是新手 SELECT foo, COUNT(foo) AS occurances FROM bar GROUP BY

我将如何在核心数据中执行此语句的等效操作?基本上,我想得到一个关于foo发生次数最多的10个列表,包括它发生的次数

基本上,我将所有用户搜索记录为核心数据中的单个条目。我希望能够选择他们搜索最多的10个项目,并以最流行的开始顺序显示它们。所以基本上我想要的是:


  • Baa | 10
  • 海| 8
  • 方框| 6
等等


谢谢你能提供的帮助。我对核心数据还是新手

  SELECT foo,
         COUNT(foo) AS occurances 
    FROM bar 
GROUP BY foo 
ORDER BY occurances DESC 
   LIMIT 10;

核心数据不支持聚合表达式。我建议你换个型号。你的实体说“搜索”将有两个属性,搜索词和事件。执行新搜索时,检查给定的搜索词是否已经存在,如果已经存在,则增加出现次数(如果不插入新实体)。如果要显示前十项,可以按引用对对象进行排序,并显示前十项

更新: 根据您需要展示当前/月/年的热门搜索,而不是问题中给出的“所有时间”,根据,您必须分两步完成。假设您的实体SearchEvent具有属性searchTerm和searchDate:

  • 使用
    NSPredicate
    返回给定日期后的所有SearchEvents
  • 迭代结果以聚合searchTerm的出现次数。使用
    NSMutableDictionary
    进行分组

  • 这可能是一个昂贵的操作,因此将结果保存在后台更新的缓存中可能是有意义的。首先,创建一个核心数据实体,该实体具有:userSearchTerm和userSearchDate。并在每次搜索完成时创建一个记录

    通过声明获取请求来启动代码。 并使用
    NSPredicate
    按日期筛选:

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"UserSearches" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];
    
    NSPredicate *nameFilter = [NSPredicate predicateWithFormat:@"(userSearchDate like[cd] %@) AND (userSearchTerm like[cd] %@)",weekName,termToFind];
    [fetchRequest setPredicate:nameFilter];
    
    like筛选器中的[cd]指定它不区分大小写。您可能还需要根据要使用的日期和格式更改此筛选器

    然后,将fetchResultType设置为
    NSDictionaryResultType

    [fetchRequest setResultType:NSDictionaryResultType];
    
    这将返回一本您可以使用的词典

    要使用聚合函数,需要使用
    NSExpressionDescription

    这是一个广泛的代码,我无法为您正确测试它,但您可以在这里阅读。在“获取特定值”一节中,介绍了如何执行聚合函数:


    有关
    NSExpression
    的所有可用聚合函数的参考,请转到函数expressionForFunction:arguments:列表所在位置。

    我想到了这一点,但问题是我希望能够显示最近一周、一个月和一年中最流行的函数。关于如何做到这一点有什么想法吗?更新了答案,提出了新的要求。我还在开发人员文档中读到,核心数据不支持聚合表达式。。。但是在docs:Xcode tools for Core Data的这一页上,它在底部清楚地显示了一个带有@avg的图像,该图像位于表达式编辑器中。奇怪,谢谢你的回复。我尝试使用:NSExpression*countnamexpression=expressionForFunction:arguments:w/count:然后执行fetch请求,但这只是给出了总计数。你知道我做错了什么吗?你以前有没有使用NSPredicate来过滤特定日期和搜索词的错误?我正在编辑答案,以便在谓词中包含一个“AND”语句,这就是问题所在。我没有搜索词。我只想所有的搜索词从该时间跨度被列在多少时间的顺序,他们已经发生。