Использование LIKE "% something%" в FMDatabase для iOS

Я не уверен, что это правда или нет, но мне сказали, что 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 ответа

Не должно быть причин, по которым можно было бы работать, а другое не работало бы, предполагая, что переменная вашего поискового текста из первой является вопросительным знаком, поскольку вы помещаете этот литерал в строку 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];

EDIT: попробуйте изменить его на это и посмотрите, что говорит трассировка:

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];


FMResultSet *result = [db executeQuery: @"SELECT * FROM channels_list WHERE type = 'person' AND members LIKE (?)",[NSString stringWithFormat:@"%%%@%%", userID]];

licensed under cc by-sa 3.0 with attribution.