2015-06-22 2 views
0

Итак, я спросил this question о том, как построить SQL-запрос для исключения определенных значений в моем приложении Swift. Он не получил много тяги, но я выяснить способ, который работает (может быть, есть способ лучше?)Распаковать значения в NOT IN SQL-запрос в приложении IOS

let querySQL = "SELECT name, picture_name from member_data where picture_name is not ? and name not in (?, ?) ORDER BY RANDOM() LIMIT 1"; 
rightAnswer = memberDatabase!.executeQuery(querySQL, withArgumentsInArray: ["None", "Bob", "Susan"]) 

Хотя это работает в этом случае, я не знаю, сколько имен я d хотите исключить; это может быть 0-10 имен (это игра викторины, и я не хочу повторять вопросы, поэтому каждый раз я нажимаю имя на массив). То, что я хочу что-то вроде:

badNames = ("Bob", "Susan") //this can be 0-10 items long 

let querySQL = "SELECT name, picture_name from member_data where picture_name is not ? and name not in \(badNames) ORDER BY RANDOM() LIMIT 1"; 
+0

Вы можете сыграть бит больше с строкой запроса и создать его с таким количеством параметров ('?'), Как вы хотите – sage444

ответ

1

Я действительно не знаю, Swift, но вы должны понять это из этого кода:

var list = @""; 
for(NSString *name in badNames) 
{ 
    if(list.length) 
    { 
     list+=",'"+name+"'"; 
    }else{ 
     list+="'"+name+"'"; 
    } 
} 
let querySQL = "SELECT name, picture_name from member_data where picture_name is not ? and name not in "+list+" ORDER BY RANDOM() LIMIT 1"; 

быть также осторожны, что вы не имеете любые символы в строках или вы можете получить SQL-инъекцию!

+0

Я думаю, что ваш ответ может работать, но это худший способ заполнить параметры в sql-запросе из-за возможной sql-инъекции – sage444

+0

Я знаю, что на самом деле имя одного человека _does_ есть в нем. – thumbtackthief

+0

Использовать тот же алгоритм, чтобы вывести список из '' 's. –