en utilisant des left outer join sur la même table, me permettant d'avoir des colonnes avec des noms différents et de pouvoir appliquer mes différentes clauses where.
-------------
Bonjour,
Je vous expose mon projet sur lequel je travail actuellement.
je dispose d'une base de photos pour laquelle chacune peut appartenir à plusieurs groupes composés de plusieurs tags.
voir capture ci-dessous
et la table des tags pour chaque photo
Chaque ligne représente une photo avec un tag Une photo peut donc avoir plusieurs lignes correspondant à différents tag à laquelle elle appartient
Le problème que je rencontre se situe au niveau des critères de recherche. la recherche pour chaque groupe est un OU la recherche entre groupe est un ET
et là .... je bloque, car je peux récupérer sans problème les OU mais si je rajoute un ET sur un tag d'un autre groupe, là plus rien ne remonte.
Si vous avez une piste pour m'aiguiller je suis preneur.
Salut, désolé pour la mise en forme dégueulasse. En plus, les requêtes ont une syntaxe incorrecte.
Je ne peux pas les tester, donc, je te laisse le soin de les lire et les retranscrire en langage SQL correct pour effectuer les tests.
Sans transition, ma contribution :
une photo a un identifiant
une photo peut avoir plusieurs tags
la relation étiqueter a une photo et un identifiant
un groupe a un identifiant
un tag fait parti d'un seul groupe donc un tag a un identifiant et un groupe
PHOTO
P1
P2
P3
TAG
T1
T2
T3
ÉTIQUETER
P1, T1
P1, T2
P2, T2
P3, T1
P3, T2
P3, T3
je veux les photos qui ont le tag T2 ;
je veux les photos qui ont le tag T1 OU T3 ;
je veux les photos qui ont le tag T1 ET T2 ;
je veux les photos qui ont UNIQUEMENT le tag T1 ET T2 ;
POUR 1 :
P1
P2
POUR 2 :
P1
P3
POUR 3 :
P1
P3
POUR 4 :
P1
SELECT
PHOTO
FROM
PHOTO JOIN ÉTIQUETER JOIN TAG
WHERE
DÉBUT POUR 1 :
TAG VAUT T2
FIN POUR 1
DÉBUT POUR 2 :
TAG IN (T1, T3)
FIN POUR 2
DEBUT POUR 3 :
TAG VAUT T1 ET TAG VAUT T3
FIN POUR 3
DÉBUT POUR 4 :
TAG VAUT T1 ET TAG VAUT T2 ET TAG NOT IN(select tag from tag
where not tag in(T1, T2))
FIN POUR 4
ALTERNATIVE DÉBUT POUR 4 :
where TAG = all (select tag from tag
where tag in (T1, T2)) AND TAG NOT IN(select tag from tag
where not tag in(T1, T2))
FIN ALTERNATIVE POUR 4
Requête sql multicriteres
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.