Основные данные: сопоставление комбинации нескольких элементов в отношении ко многим - PullRequest
0 голосов
/ 29 сентября 2018

РЕДАКТИРОВАТЬ: Забыл упомянуть, что впоследствии я отфильтровываю карточки с нежелательными цветами в коде Swift.

Итак, это еще один вопрос, касающийся многих отношений в Базовых данных и какнаписать предикат для него.Короче говоря, я бы хотел сопоставить комбинацию нескольких элементов в отношении ко-многим.

Настройка

  1. Таблица цветов с пятью цветами: Красный, Зеленый, Белый, Черный, Синий
  2. Таблица карт , каждая карта имеет отношение ко многим к таблице цветов

Цель

Искать карты с черным и / или белого цвета, что означает:

  1. Карта может быть только черная
  2. Карта может быть только белый
  3. Карта может быть черно-белой

Пока

Наилучшие результаты (упрощенно):

NSPredicate(format: "ANY color == Black") // Only black cards, good
NSPredicate(format: "ANY color == White") // Only white cards, good
NSPredicate(format: "ANY color == Black OR ANY color == White") // Only black AND white cards, bad

Здесь очень похожий пост, касающийся MySQL, на случай, если он поможет дополнительно прояснить проблему:

SQL: сделать цвета доступными для поиска в таблице цветов

1 Ответ

0 голосов
/ 30 сентября 2018

На основании комментария @ pbasdf я нашел следующее решение (с лучшим синтаксисом в реальном коде):

// Desired colors let includePredicate = NSPredicate(format: “SUBQUERY(color, $C, $C == 'Black' OR $C == 'White').@count > 0”)

// Undesired colors let excludePredicate = NSPredicate(format: “SUBQUERY(color, $C, $C == 'Green' OR $C == 'Red' OR $C == 'Blue').@count == 0”)

// Combined to one predicate let finalPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [includePredicate, excludePredicate]

...