J'ai une application Web qui met en correspondance les images avec les balises, et je dois créer un moyen d'affiner les résultats de manière dynamique pour la recherche de balises. Cependant, je ne peux pas trouver un moyen propre de faire ces requêtes SQL, et c'est là que j'ai besoin de votre aide.SQL n-à-n correspondant à plusieurs valeurs
L'idée est que si je recherche des balises "clean" et "dog", j'obtiendrai des résultats d'image qui ont à la fois les balises "clean" et "dog". Si j'inclus également le tag "little", mes résultats devront se limiter aux images associées aux trois tags. Donc, ayant une relation N-à-N, quelle est la bonne façon de le faire?
Mon approche naturelle générait quelque chose de code comme ça, mais je ne doute pas comme où il va:
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 (...)
...
)
)
Certes, ce n'est pas vraiment bon. Une idée?
Merci!
Ceci est assez rigide dans le nombre de balises permises/requises, ainsi que renvoyer une ligne pour chaque balise spécifiée, plutôt que pour chaque image. –
Le 'GROUP BY' devrait éviter de renvoyer une ligne pour chaque tag. J'ai édité la question pour montrer comment cela fonctionnerait avec un nombre dynamique de tags. –
Merci beaucoup! Je n'ai pas pensé à revérifier les résultats avec HAVING COUNT(). – Alpha