代码之家  ›  专栏  ›  技术社区  ›  Kyle Decot

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

  •  4
  • Kyle Decot  · 技术社区  · 14 年前

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


    • Baa | 10
    • 海| 8
    • 箱| 6

    等。。。。。


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

      SELECT foo,
             COUNT(foo) AS occurances 
        FROM bar 
    GROUP BY foo 
    ORDER BY occurances DESC 
       LIMIT 10;
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   elcool codeVerine    14 年前

    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

    这是一个广泛的代码,我不能为您测试它正确,但您可以阅读这里。在截面上 http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html

    所有可用聚合函数的引用 NSExpression 转到函数

        2
  •  0
  •   falconcreek    14 年前

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

    更新: 根据您的需要,您需要展示今天/月/年的热门搜索,而不是问题中给出的“所有时间” documentation

    1. NSPredicate 返回给定日期后的所有SearchEvents
    2. 迭代结果以聚合searchTerm的出现次数。使用 NSMutableDictionary 对于分组

    这可能是一个昂贵的操作,因此将结果保存在后台更新的缓存中可能是有意义的