我的应用有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相同吗?
答案 0 :(得分:2)
CoreData不是SQL,它不接受SQL语句。因此,如果您真的想要使用SQL查询,那么请使用SQLite。
我个人会使用CoreData并在应用程序代码中进行处理,即使我对SQL非常熟悉。
CoreData是一个“俯卧撑”,需要一些时间来学习它,我建议寻找一本好书(Marcus Zarra刚出版他的第二版)和/或一些视频。