Bonsoir,
Je ronge un os...
Je réalise actuellement un module sur un logiciel existant, je ne peux donc modifier la structure de la base.
La table à laquelle j'accède à la structure suivante :
Chaque enregistrement correspond à un attribut et sa valeur pour un article donné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ATTRIBUTS(#id, id_article, nom_attribut, valeur_attribut)
Un article a plusieurs attributs.
Mon but est de proposer à l'utilisateur des listes de valeurs à sélectionner pour chaque attributs.
Les listes doivent être dynamiques. Si l'utilisateur a choisi une valeur dans une première liste,
la seconde liste (second attribut) ne doit proposer uniquement les valeurs pour lesquelles la combinaison existe.
Exemple dans la table :
Exemple de liste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 id - id_article - nom_attribut - valeur_attribut -------------------------------------------------------------------- 1 23 attr1 1 2 23 attr2 12 3 36 attr1 1 4 36 attr2 6 5 58 attr1 1 6 58 attr2 8 7 79 attr1 2 8 79 attr2 4
Si je choisi la valeur 1 pour l'attribut attr1, dans la seconde liste je dois avoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part attr1 : 1, 2
Pas compliqué vous me direz :
Code : Sélectionner tout - Visualiser dans une fenêtre à part attr2 : 12, 6, 8
Voir une auto-jointure... je ne sais pas si c'est une bonne solution je ne suis pas très calé dans le domaine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * from table WHERE id_article IN (SELECT id_article FROM table WHERE nom_attribut='attr1' and valeur_attribut = 1);
Mais le gros soucis c'est que mon exemple se base sur 2 attributs différents, or en réalité il peut y en avoir bien plus. Et je ne sais pas à l'avance combien. Et je ne suis pas sur que ça soit très efficace d'imbriquer et d'imbriquer encore des requêtes... Surtout qu'elle sera soumise à bonne charge.
Existe-t'il un moyen plus propre d'obtenir ce résultat sans modifier la structure de la table ? Je sèche ...
Merci d'avance.
Partager