iOS - 核心数据或Sqlite套件我的应用程序?

时间:2013-03-31 14:30:52

标签: ios sqlite core-data join group-by

我的应用有2个实体(或表)。

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&源码

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

如何将上述sql转换为CoreData或Sqlite表单?

感谢。

修改

我可以混合两种吗? CRUD正在使用 CoreData ,但是对于这样复杂的查询,请使用 Sqlite (FMDB库)

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

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

1 个答案:

答案 0 :(得分:2)

CoreData不是SQL,它不接受SQL语句。因此,如果您真的想要使用SQL查询,那么请使用SQLite。

我个人会使用CoreData并在应用程序代码中进行处理,即使我对SQL非常熟悉。

CoreData是一个“俯卧撑”,需要一些时间来学习它,我建议寻找一本好书(Marcus Zarra刚出版他的第二版)和/或一些视频。