Я пытаюсь запросить объекты, которые соответствуют ВСЕМ из данного набора тегов.
По сути, я хочу, чтобы пользователи могли добавлять все больше и больше тегов для фильтрации или «сужения» своих результатов поиска, как это делает newegg.com.
Моя структура таблицтаблица объектов, таблица тегов и таблица отношений MANY: MANY ObjectsTags.Итак, у меня есть запрос JOIN, например:
SELECT * FROM Objects
LEFT OUTER JOIN ObjectsTags ON (Objects.id=ObjectsTags.object_id)
LEFT OUTER JOIN Tags ON (Tags.id=ObjectsTags.tag_id)
Я пытался использовать условие / условие IN, например:
SELECT * FROM Objects
LEFT OUTER JOIN ObjectsTags ON (Objects.id=ObjectsTags.object_id)
LEFT OUTER JOIN Tags ON (Tags.id=ObjectsTags.tag_id)
WHERE Tags.name IN ('tag1','tag2')
GROUP BY Objects.id
Но я узнал, что это имитирует серию OR,таким образом, чем больше тегов вы добавляете в запрос, тем БОЛЬШЕ результатов вы получаете, а не сужение набора результатов, как я надеялся.
Я также пытался выполнить несколько условий LIKE WHERE, AND, объединившись:*
Но это не возвращает результатов, так как, когда результаты сгруппированы вместе, столбец OUTER JOINed Tags.name содержит только «tag1», а не «tag2».Строка результата, в которой найдено совпадение с тегом2, «скрывается» с помощью GROUPing.
Как мне сопоставить ВСЕ теги, чтобы получить эффект «сужения» или «детализации», который мне нужен?Благодаря.