我正在实现一个图像 dao,它根据 client_type(例如 dropbox、facebook 等)选择图像,如下所示:
从与提供的客户端类型列表匹配的任何启用的客户端返回结果:
//clientTypes is an array of NSNumber objects - there's an enum for each client type
- (NSArray*)listByClientTypes:(NSArray*)clientTypes
{
__block NSArray* results;
[[self.manager queue] inDatabase:^(FMDatabase* database)
{
NSMutableArray* mappedResults = [[NSMutableArray alloc] init];
NSString* sql = @"SELECT IMAGE_ADDRESS, CLIENT_TYPE, CREATED, FK_LOCATIONS_UNIQUE_COORD, PLACE_NAME, CITY, COUNTRY, IMAGE "
"FROM IMAGES LEFT JOIN LOCATIONS ON IMAGES.FK_LOCATIONS_UNIQUE_COORD = LOCATIONS.UNIQUE_COORD "
"WHERE CLIENT_TYPE IN (SELECT CLIENT_TYPE FROM CLIENT_STATE WHERE ENABLED = 1) "
"AND CLIENT_TYPE IN (%@)"; // <------- THIS IS THE LIST OF CLIENTS
FMResultSet* resultSet = [database executeQuery:sql];
while ([resultSet next])
{
[mappedResults addObject:[self extractImageFrom:resultSet]];
}
results = [mappedResults copy];
}];
return results;
}
传递“IN”子句的最佳方法是什么?
通常我会使用参数绑定(例如'?'),但我不知道如何为未知数量的参数执行此操作。这可能吗?
为了找到更好的方法,我打算将逗号分隔列表替换为 SQL 查询。. 考虑到它们只是整数,这将是非常安全的。