【发布时间】:2016-10-14 16:40:22
【问题描述】:
我在其中一个表中有一个Integer 列(响应)。我必须使用 In 子句来获得结果。但这行不通。这就是我正在做的:
NSString *responseString = @"";
if(filter.isAttending && filter.isDeclined && filter.isNotResponded)
responseString = @"0,1,3";
else if(filter.isAttending && filter.isDeclined && !filter.isNotResponded)
responseString = @"0,1";
else if(filter.isAttending && !filter.isDeclined && filter.isNotResponded)
responseString = @"0,3";
else if(!filter.isAttending && filter.isDeclined && filter.isNotResponded)
responseString = @"1,3";
else if(filter.isAttending && !filter.isDeclined && !filter.isNotResponded)
responseString = @"0";
else if(!filter.isAttending && !filter.isDeclined && filter.isNotResponded)
responseString = @"3";
else if(!filter.isAttending && filter.isDeclined && !filter.isNotResponded)
responseString = @"1";
else if(!filter.isAttending && !filter.isDeclined && !filter.isNotResponded)
responseString = @"-1";
const char *sql = sql = "SELECT * FROM Activity Inner Join Invitation on Invitation.ActivityId = Activity.ActivityId Where Invitation.Response in (?) AND Activity.IsDeleted = ? AND Activity.IsAdmin = ? AND Activity.StartDate <= DateTime('now')";
这就是我绑定值的方式:
sqlite3_bind_text(statement, 1, [responseString UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_int(statement, 2, isDeleted);
sqlite3_bind_int(statement, 3, [isAdmin intValue]);
我没有得到任何结果。我怀疑的是,查询变为:
SELECT * FROM Activity Inner Join Invitation on Invitation.ActivityId = Activity.ActivityId Where Invitation.Response in ("0,1,3") AND Activity.IsDeleted = 1 AND Activity.IsAdmin = 251697 AND Activity.StartDate >= DateTime('now')
注意是 ("0,1,3") 而不是 (0,1,3)。
但是,当我在 Sqlite 管理器中编写此查询时,它给了我正确的结果:
SELECT * FROM Activity Inner Join Invitation on Invitation.ActivityId = Activity.ActivityId Where Invitation.Response in (0,1,3) AND Activity.IsDeleted = 1 AND Activity.IsAdmin = 251697 AND Activity.StartDate >= DateTime('now')
【问题讨论】:
-
用你如何绑定
in子句的值来更新你的问题。 -
@rmaddy:更新!!
-
需要去掉双引号形式("0,1,3"),必须是(0,1,3)
-
@NiravDoctorwala :这是我的实际问题。
-
你有没有尝试在你的 sql String var 中使用 %@。
标签: ios objective-c sqlite in-clause