Основной запрос данных нескольких столбцов с одной строкой поиска - PullRequest
2 голосов
/ 18 февраля 2011

У меня есть простая модель базовых данных с двумя строковыми атрибутами (размер и категория).Имея строку поиска, такую ​​как «маленький виджет», можно ли вернуть записи, которые соответствуют всем словам запроса, по крайней мере, одному атрибуту (т.е. всем записям с размером «маленький» и категорией «виджет»)?В настоящее время у меня есть:

NSString *search = @"small widget"
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"size contains[cd] %@ OR category contains[cd] %@", search, search];
...

Это не вернет никаких результатов (так как никакая категория или размер не равняются "маленькому виджету").Какие-либо предложения?Обратите внимание, что строки поиска будут вводиться пользователем из текстового поля и могут появляться в любом порядке, поэтому я не могу разделить их вручную.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Я не проверял это, но похоже, что вы хотите это:

NSString *search = @"small widget";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ contains[cd] size AND %@ contains[cd] category", search, search];

Строка поиска будет содержать (или не содержать) размер и категорию, вам следует спросить, содержится ли в строке поиска текущий размер или категория.

Вы также можете разбить строку поиска и изменить свой предикат. Вы должны их идентифицировать тот, который работает лучше

NSString *search = @"small widget";
    NSArray *array = [search componentsSeparatedByString:@" "];
    NSMutableArray *subPredicates = [NSMutableArray array];
    for (NSString *q in array) {
        [subPredicates addObject:
         [NSPredicate predicateWithFormat:@"size contains[cd] %@ OR category contains[cd] %@", q, q]];
    }
    NSCompoundPredicate *predicate = [[[NSCompoundPredicate alloc] initWithType:NSAndPredicateType
                                                                 subpredicates:subPredicates] autorelease];
0 голосов
/ 23 мая 2017

Для Swift вы можете выбрать несколько столбцов, используя propertiesToFetch

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "<YOUR ENTITY NAME>")
let predicate = NSPredicate(format: "<YOUR PREDICATE>")
fetchRequest.predicate = predicate
fetchRequest.resultType = .dictionaryResultType


// Here is where you can query multiple columns, you can add as much columns as you want and fetch them as an array of dictionaries
fetchRequest.propertiesToFetch = ["column1", "column2", "column3, "column4"]


let sort = NSSortDescriptor(key: "column1", ascending: false)
fetchRequest.sortDescriptors = [sort]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...