gpt4 book ai didi

mysql - 单个实体核心数据获取请求的 SQL 语句

转载 作者:行者123 更新时间:2023-11-29 00:36:42 24 4
gpt4 key购买 nike

我在 CoreData 中有一个 Entity 模仿具有以下结构的 MySQL 数据库表:

Photo
abv Double
photoId Integer16
photographer String
isActive Boolean
lastUpdated Data
name String

我可以运行以下 SQL 语句来获得我想要的结果集:

SELECT  `photographerName`, COUNT(`photographerName`) 
FROM `Photos`
WHERE `isActive` LIKE 1
GROUP BY `photographerName`
ORDER BY `photographerName`

我可以使用NSFetchRequestNSSortDescriptorNSPredicateNSExpressionDescription的什么组合来实现iOS 中的结果相同吗?

我正在使用以下内容:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photo"];
NSSortDescriptor *photographerSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"photographer" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
NSPredicate *onlyActivePhotos = [NSPredicate predicateWithFormat:@"isActive == 1"];

request.sortDescriptors = @[photographerSortDescriptor];
request.predicate = onlyActivePhotos;

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];

这让我的 isActive 正常,但为每个 Photo 返回一行,而不是 Photographer

或者...我应该把它分成两个实体吗?例如,PhotographerPhotos 具有一对多关系?

最佳答案

首先,Photo-Photographer关系当然是更好更灵活的设计。

不过,你想要的也可以实现。您只能获取照片实体,因此在您必须过滤生成的数组以仅返回您的摄影师姓名之后。

NSArray *photographerNames = [fetchedResultsController.fetchedObjects
valueForKeyPath:"@photographer"];
NSSet *uniqueNames = [NSSet setWithArray:photographerNames];
NSArray *orderedNames = [uniqueNames sortedArrayUsingDescriptors:
@[[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES]]];

如您所见,这非常麻烦。此外,您还丢失了哪些照片与每位摄影师相关联的信息。

所以请顺着关系走。毕竟,Core Data 是一个对象图,而不是数据库包装器。

关于mysql - 单个实体核心数据获取请求的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959006/

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