2014-04-21 84 views
1

我在的SQLite數據庫這個數據:SQLite的混合邏輯運算符OR和AND iOS中

+----+------------+------------+ 
| id | start_date | end_date | 
+----+------------+------------+ 
| 1 | 2014-04-22 | 2014-04-22 | 
| 2 | 2014-04-22 | null  | 
+----+------------+------------+ 

而我試圖讓兩排的一個SQL像

NSString *query = @"SELECT * FROM periods WHERE `start_date` <= ? AND (`end_date` >= ? OR `end_date` IS NULL)"; 
FMResultSet *set = [db executeQuery:query, date, date]; 

但它只返回第一行。

確切的SQL正確地返回它們兩個在SQLite管理器加載項爲火狐

+1

你用什麼代碼遍歷結果集? –

+0

無需將列標題放入反引號內。 – rmaddy

回答

1

要獲得所有的行,你只需通過對整個結果集進行迭代:

NSString *query = @"SELECT * FROM periods WHERE start_date <= ? AND (end_date >= ? OR end_date IS NULL)"; 
NSString *date = @"2014-04-22"; 
FMResultSet *rs = [db executeQuery:query, date, date]; 

while ([rs next]) { 
    NSLog(@"%@", [rs resultDictionary]); 
} 
[rs close]; 

這對我工作的罰款。問題不在於你的SQL,而在你的代碼中的其他地方。

+0

我不敢相信我把'if'而不是'while' –