Tengo una aplicación web que combina imágenes con etiquetas, y necesito crear una forma de refinar dinámicamente los resultados para la búsqueda de etiquetas. Sin embargo, no puedo encontrar una forma clara de realizar consultas SQL, y ahí es donde necesito tu ayuda.SQL n-to-n que coincide con varios valores
La idea es que si busco las etiquetas "limpiar" y "perro", tendré resultados de imágenes que tengan las dos etiquetas "limpia" y "perro". Si también incluyo la etiqueta "pequeño", mis resultados tendrían que reducirse a imágenes que tienen las tres etiquetas asociadas.
Entonces, tener una relación N-a-N, ¿cuál es la forma correcta de hacerlo?
Mi enfoque natural estaba generando código de algo como esto, pero desde luego no les gusta a dónde 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 (...)
...
)
)
Ciertamente, eso no es muy bueno. ¿Alguna idea?
Gracias!
Esto es bastante rígido en cuanto a la cantidad de etiquetas permitidas/requeridas, así como al devolver una fila para cada etiqueta especificada, en lugar de para cada imagen. –
El 'GROUP BY' debe evitar devolver una fila para cada etiqueta. Edité la pregunta para mostrar cómo funcionaría con un número dinámico de etiquetas. –
¡Muchas gracias! No he pensado volver a verificar los resultados con HAVING COUNT(). – Alpha