У меня есть 3 таблицы: теги, продукты и таблица отношений между ними.
Например, таблица отношений выглядит следующим образом:
tagId | ProductId
1 | 1
2 | 1
2 | 9
Пользователь может выбрать две опции: " Все эти " или " Одна из этих ".
Так что, если пользователь выбирает Все эти , это означает, что продукт должен иметь ровно все теги, которые выбрал пользователь.
Таким образом, если пользователь выбирает теги с идентификатором 1 и 2 , он должен выбирать только продукт с идентификатором 1 , поскольку этот продукт имеет в точности те же теги , которые выбрал пользователь. (Другой способ - если пользователь выбирает тег с идентификатором 2 , он должен выбирать только продукт с идентификатором 9 .)
Итак, продукт должен иметь все теги, которые выбрал пользователь (не больше, не меньше).
SQL, который у меня уже есть для Any / One из них:
SELECT DISTINCT s.SKU
FROM SKUToEAN as s
LEFT JOIN ProductDetails as p ON s.ProductDetailID=p.id
JOIN ProductTagRelation as ptr ON (ptr.productId=p.id and ptr.tagId IN(Ids of selected tags))
Пример поведения:
TagId = 1 it should select => None
TagId = 2 it should select => 9
TagId = 1,2 it should select = 1,9
Так что, вероятно, мне нужно два запроса. Один для любого / один из них (у меня уже есть этот) и второй для всех этих.
С помощью PHP я решаю, какой запрос использовать.