У меня есть веб-приложение, которое соответствует изображениям для тегов, и мне нужно создать способ динамического уточнения результатов поиска тегов. Тем не менее, я не могу найти чистый способ сделать эти SQL-запросы, и именно там мне нужна ваша помощь.SQL n-to-n, соответствующий нескольким значениям
Идея состоит в том, что если я ищу теги «clean» и «dog», у меня будут результаты изображения, в которых есть как теги «clean», так и «dog». Если я также добавлю тег «little», мои результаты должны были бы сужаться к изображениям, связанным с тремя тегами.
Итак, имея отношение N-to-N, что является правильным способом сделать это?
Мой естественный подход генерации кода что-то вроде этого, но я, конечно, не нравится, где это происходит:
SELECT images.*
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tags.tag = @tag1
AND EXISTS
(
SELECT 1
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tag = @tag2
AND EXISTS
(
SELECT 1
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tag = @tag3
AND EXISTS (...)
...
)
)
Конечно, это не очень хорошо. Есть идеи?
Спасибо!
Это довольно жесткое количество разрешенных/требуемых тегов, а также возвращающая строку для каждого указанного тега, а не для каждого изображения. –
'GROUP BY' следует избегать возврата строки для каждого тега. Я редактировал вопрос, чтобы показать, как он будет работать с динамическим числом тегов. –
Спасибо большое! Я не думал о повторной проверке результатов с помощью HAVING COUNT(). – Alpha