У меня есть три таблицы:
Таблица игр (tbl_plays), таблица возможных тегов (tbl_tags) и таблицу примененных тегов (tbl_tagged) для каждого воспроизведения. к нему может быть применен один или несколько тегов, например,
"Три слепые мыши" имеет тег "Детский театр"
"50 оттенков серого, мюзикл" имеет тег "Мюзикл" Театр» и «Контент для взрослых»
В «Музыкальном спектакле «Нарния» отмечены теги «Детский театр» и «Мюзикл». Театр»
Я пытаюсь создать запрос, который возвращает только те пьесы, у которых есть ВСЕ выбранные теги (например, если пользователь выбирает «Детский театр», результат должен содержать как «Три слепых», так и Мыши» и «Нарния, мюзикл», но следует опустить «50 оттенков серого, мюзикл», но если они выберут одновременно «Детский театр» и «Музыкальный театр», результат должен содержать только «Нарнию, мюзикл» и НЕ должен содержать одновременно «Три слепые мыши» и «50 оттенков серого, мюзикл»).
Мой текущий запрос возвращает неверные результаты. Вот мой текущий запрос, структура таблицы показана ниже.
Я использую PHP 8.3.14 и выполняю запросы с помощью MySQLi
SQL-запрос :
Код: Выделить всё
SELECT DISTINCT
tbl_plays.play_ID,
tbl_plays.play_title,
tbl_tagged.tag_ID
FROM
tbl_plays
INNER JOIN tbl_tagged ON tbl_plays.play_ID = tbl_tagged.play_ID
WHERE
tbl_tagged.tag_ID IN (1,2)
GROUP BY
tbl_plays.play_ID
HAVING
COUNT(1) = 2
tbl_plays (play_ID, play_title)
tbl_tags (tag_ID, tag_name)
tbl_tagged (tagged_ID, play_ID, tag_ID)
так, например, tbl_plays:
play_ID
play_title
1
Три слепые мыши
2
50 оттенков серого, мюзикл
3
Нарния, музыкальная пьеса
tbl_tags:
tag_ID
имя_тега
1
Детский театр
2
Музыкальный театр
3
Контент для взрослых
tbl_tagged:
tagged_ID
play_ID
tag_ID
1
1
1
2
2
2
3
2
3
4
3
1
5
33
Подробнее здесь: https://stackoverflow.com/questions/792 ... gs-not-any
Мобильная версия