2016-06-14 3 views
0

테이블 중 하나에 Integer 열 (응답)이 있습니다. 나는 결과를 얻으려면 절에 을 사용해야합니다. 그러나 그것은 작동하지 않습니다.Sqlite의 정수에 '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') 
+0

당신이'in' 절에 대한 값을 결합하는 방법으로 질문을 업데이트합니다. – rmaddy

+0

@rmaddy : 업데이트되었습니다! – Nitish

+0

큰 따옴표 ("0,1,3")를 제거해야합니다. (0,1,3) –

답변

1

귀하의 의심의 여지가 정당화를; sqlite3_bind_text()은 단일 텍스트 값을 바인딩합니다.

여러 정수 값을 바인드하려면 적절한 수의 매개 변수 마커를 SQL 문자열 (... IN (?,?,?))에 삽입하고 각각에 대해 sqlite3_bind_int()을 호출해야합니다.

(%@으로, SQL 쿼리에 직접 숫자를 넣어하는 것이 더 쉬울 수 있습니다.)