2013-03-31 25 views
-1

我的应用程序有2个实体(或表)。iOS - CoreData或Sqlite套件我的应用程序?

Category (id, name)
Item (id, name, amount, date, categoryId)

我需要的是

SELECT categoryId, Category.name, 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 1, amount, 0)) AS jan 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 2, amount, 0)) AS feb 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 3, amount, 0)) AS mar 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 4, amount, 0)) AS apr 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 5, amount, 0)) AS may 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 6, amount, 0)) AS jun 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 7, amount, 0)) AS jul 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 8, amount, 0)) AS aug 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 9, amount, 0)) AS sep 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 10, amount, 0)) AS oct 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 11, amount, 0)) AS nov 
    SUM(IF(MONTH(FROM_UNIXTIME(date)) = 12, amount, 0)) AS dec 
FROM Item INNER JOIN Category ON Item.categoryId = Category.id 
WHERE YEAR(FROM_UNIXTIME(date)) = 2012 
GROUP BY categoryId 

注:以上查询是写在MySQL的方式,我完全陌生的CoreData & sqlite的

在这种情况下,CoreData VS Sqlite,whic h 1更适合?

如何将上述sql转换为CoreData或Sqlite形式?

谢谢。

编辑

我可以混用吗?对于CRUD正在使用核心数据,但对于这样一个复杂的查询使用Sqlite(FMDB库)

默认情况下,CoreData创建了一个扩展名为.sqlite的文件。但是,在FMDB github instruction这里是扩展名.db。有关系吗?

数据库路径[FMDatabase databaseWithPath:@"/tmp/tmp.db"];是否与CoreData相同?

+2

请参阅[CASE](http://www.sqlite.org/lang_expr.html#case)和[strftime](http://www.sqlite.org/lang_datefunc.html)的文档。 –

+0

[这里](http://rdcworld-iphone.blogspot.in/2013/04/simple-and-basic-coredata-in-iphone.html)是熟悉Core Data的简单教程,可以帮助你 – swiftBoy

+0

@RDC感谢您的评论,但我试图询问有关CoreData中的复杂查询,可能涉及2个或更多的表加入 –

回答

2

CoreData不是SQL,它不接受SQL语句。所以如果你真的被绑定到使用SQL查询然后使用SQLite。

就我个人而言,我会使用CoreData并在应用程序代码中执行我的处理,尽管我对SQL非常熟悉。 CoreData是一种“俯卧撑”,需要一些时间来学习它,我建议寻找一本好书(Marcus Zarra刚出版第二版)和/或一些视频。

+0

是否有任何示例显示如何将上述查询转换为CoreData? –

相关问题