8791 sujets
Je la reformule dans ce cas.
Voilà, c'est à priori très simple mais je ne vois pas la solution :
dans la table t1, j'ai trois colonnes c1,c2,c3
j'aimerais récupérer les valeurs se trouvant dans ces trois colonnes (en retirant les doublons) pour les avoir dans un menu déroulant.
Je cherche la requête...
Merci.
Voilà, c'est à priori très simple mais je ne vois pas la solution :
dans la table t1, j'ai trois colonnes c1,c2,c3
j'aimerais récupérer les valeurs se trouvant dans ces trois colonnes (en retirant les doublons) pour les avoir dans un menu déroulant.
Je cherche la requête...
Merci.
Je ne comprends toujours pas...
Est ce que tu veux :
- Récupérer l'ensemble des combinaisons de c1, c2 et c3 existantes dans ta table t1 ?
- Récupérer toutes les valeurs de c1, toutes les valeurs de c2, et toutes les valeurs de c3 pour les mettre dans un seul menu déroulant?
- Récupérer les valeurs de chaque colonne pour en faire des menus déroulants distincts ? (1 pour chaque colonne)
D'instinct je dirai le deuxième choix..., dans ce cas tu peux utiliser une requête dans ce style:
Mais comme tu peux le voir c'est un peu du bricolage... tu peux aussi faire trois requêtes séparées et gérer les doublons avec ton langage de programmation. Ou alors il y a un soucis avec ton modèle de données mais tu ne donnes pas beaucoup d'infos alors pas évident de juger
Modifié par skywalk3r (12 Oct 2011 - 10:38)
Est ce que tu veux :
- Récupérer l'ensemble des combinaisons de c1, c2 et c3 existantes dans ta table t1 ?
- Récupérer toutes les valeurs de c1, toutes les valeurs de c2, et toutes les valeurs de c3 pour les mettre dans un seul menu déroulant?
- Récupérer les valeurs de chaque colonne pour en faire des menus déroulants distincts ? (1 pour chaque colonne)
D'instinct je dirai le deuxième choix..., dans ce cas tu peux utiliser une requête dans ce style:
SELECT distinct c
FROM ((SELECT distinct c1 as c FROM t1)
UNION (SELECT distinct c2 as c FROM t1)
UNION (SELECT distinct c3 as c FROM t1)) as tmp
Mais comme tu peux le voir c'est un peu du bricolage... tu peux aussi faire trois requêtes séparées et gérer les doublons avec ton langage de programmation. Ou alors il y a un soucis avec ton modèle de données mais tu ne donnes pas beaucoup d'infos alors pas évident de juger

Modifié par skywalk3r (12 Oct 2011 - 10:38)
Salut,
Ce n'est effectivement pas une requête si simple, mais en plus elle va être très gourmande en ressource.
Ton problème vient à la base d'une mauvaise conception. Au lieu d'avoir des champs c1, c2, c3, tu aurais dû avoir deux tables supplémentaires sur lesquelles tu aurais fait une jointure.
Ta structure actuelle :
Une structure optimisée et évolutive :
Ce n'est effectivement pas une requête si simple, mais en plus elle va être très gourmande en ressource.
Ton problème vient à la base d'une mauvaise conception. Au lieu d'avoir des champs c1, c2, c3, tu aurais dû avoir deux tables supplémentaires sur lesquelles tu aurais fait une jointure.
Ta structure actuelle :
table1(id, c1, c2, c3)
Une structure optimisée et évolutive :
table1(id)
table_join(id_table1, id_table_c)
table_c(id, libelle)
je ne pense pas que ce soit possible dans mon cas car :
- chaque id de la table 1 peut avoir une combinaison différente de c1, c2, et c3
par contre, ta proposition fonctionne sans table_join puisque je peux créer une table_c avec toutes les entrées et faire une jointure t1.c1=table_c.id AND t1.c2=table_c.id AND t1.c3=table_c.id
- chaque id de la table 1 peut avoir une combinaison différente de c1, c2, et c3
par contre, ta proposition fonctionne sans table_join puisque je peux créer une table_c avec toutes les entrées et faire une jointure t1.c1=table_c.id AND t1.c2=table_c.id AND t1.c3=table_c.id
Si tu cherches a interroger ta table t1 en remontant les libellés ça doit plutôt ressembler à ça.
Au passage, ça ne prend pas de ressource que de donner un nom à tes tables, les noms courts comme ceux la on les utilise pour aliaser les tables...
Conseil : Utiliser JOIN pour faire les jointures plutôt que WHERE
Au passage, ça ne prend pas de ressource que de donner un nom à tes tables, les noms courts comme ceux la on les utilise pour aliaser les tables...

SELECT aliast1.*, aliasc1.info as c1, aliasc2.info as c2, aliasc3.info as c3
FROM t1 aliast1
JOIN c aliasc1 ON aliast1.c1ID = aliasc1.id
JOIN c aliasc2 ON aliast1.c2ID = aliasc2.id
JOIN c aliasc3 ON aliast1.c3ID = aliasc3.id
Conseil : Utiliser JOIN pour faire les jointures plutôt que WHERE