Mam aplikację internetową, która dopasowuje obrazy do znaczników, i muszę stworzyć sposób dynamicznego zawężania wyników wyszukiwania znaczników. Jednak nie mogę znaleźć prostego sposobu na wykonanie zapytań SQL i właśnie tam potrzebuję twojej pomocy.SQL n-to-n pasujące do wielu wartości
Chodzi o to, że jeśli będę szukał tagów "czysty" i "pies", będę miał wyniki obrazu, które będą miały zarówno znaczniki "czyste" i "pies". Jeśli dodaję również tag "mało", moje wyniki będą musiały zostać zawężone do obrazów, do których przypisano trzy tagi.
A więc, mając relację N do N, co jest właściwym sposobem na zrobienie tego?
Moje naturalne podejście generowania kodu coś takiego, ale na pewno nie podoba dokąd zmierza:
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 (...)
...
)
)
Oczywiście, że nie jest naprawdę dobry. Dowolny pomysł?
Dzięki!
Jest to dość sztywne pod względem liczby dozwolonych/wymaganych znaczników, a także zwracania wiersza dla każdego określonego znacznika, a nie dla każdego obrazu. –
Funkcja "GROUP BY" powinna unikać zwracania wiersza dla każdego tagu. Edytowałem pytanie, aby pokazać, jak będzie działało z dynamiczną liczbą tagów. –
Wielkie dzięki! Nie pomyślałem o ponownym sprawdzeniu wyników za pomocą HAVING COUNT(). – Alpha