Использование LIKE "%thing%" в базе данных FMD для iOS - PullRequest
0 голосов
/ 10 марта 2012

Я не уверен, правда это или нет, но мне сказали, что FMDatabase работает лучше, если вы сделаете это

NSString *query = [NSString stringWithFormat:@"SELECT * FROM db where col=?"];
FMResultSet *rs = [theDatabase executeQuery:query, columnToLookFor];

vs

NSString *query = [NSString stringWithFormat:@"SELECT * FROM db where col='columnToLookFor'"];
FMResultSet *rs = [theDataBase executeQuery:query];

Итак, у нас есть поисковый запрос, который делает это:

NSString *query = [NSString stringWithFormat:@"SELECT Symbol, Category FROM Symbols where Category like \"%%%@%%\" or Symbol like \"%%%@%%\" group by Symbol, Category order by Category", searchtext, searchtext];
FMResultSet *rs = [theDatabase executeQuery:query];

Я пытаюсь изменить это на:

NSString *query = [NSString stringWithFormat:@"SELECT Symbol, Category FROM Symbols where Category like \"%%?%%\" or Symbol like \"%%?%%\" group by Symbol, Category order by Category"];
FMResultSet *rs = [theDatabase executeQuery:query, searchtext, searchtext];

Однако во второй форме с? Мой FMResultSet равен 0, и я не уверен, что я делаю неправильно в этомсценарий.Это ускорит наш поиск вообще?Или это скорее плохой дизайн базы данных для такой функциональности, которая занимает так много времени.

Ответы [ 2 ]

0 голосов
/ 09 августа 2016
FMResultSet *result = [db executeQuery: @"SELECT * FROM channels_list WHERE type = 'person' AND members LIKE (?)",[NSString stringWithFormat:@"%%%@%%", userID]];
0 голосов
/ 10 марта 2012

Не должно быть никаких причин, по которым один из них будет работать, а другой не будет работать, если предположить, что ваша переменная searchtext из первой - это вопросительный знак, поскольку вы помещаете этот литерал в строку SQL во второй. Возможно, вы захотите изменить две строки на это:

NSString *query = [NSString stringWithString:@"SELECT Symbol, Category FROM Symbols where Category like '%%?%%' or Symbol like '%%?%%' group by Symbol, Category order by Category"];
FMResultSet *rs = [theDatabase executeQuery:query];

Кроме того, я бы сделал это перед строками, чтобы посмотреть, как выглядит SQL, когда он обрабатывается FMDB:

[theDatabase setTraceExecution:YES];

РЕДАКТИРОВАТЬ: попробуйте изменить это на это и посмотреть, что говорит трассировка:

NSString *query = [NSString stringWithString:@"SELECT Symbol, Category FROM Symbols where Category like '%%?%%' or Symbol like '%%?%%' group by Symbol, Category order by Category"];
FMResultSet *rs = [theDatabase executeQuery:query, searchtext, searchtext, nil];
...