SELECT rapatriement multiple de données suivant liste id à virgule
alphanono
Messages postés39Date d'inscriptionvendredi 9 mai 2003StatutMembreDernière intervention25 mai 2009
-
16 sept. 2008 à 20:05
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 2011
-
17 sept. 2008 à 19:29
Désolé pour ce titre foireux ... j'ai essayé de faire court pour un problème que j'ai du mal à exprimer simplement.
Je vais prendre un exemple fictif.
Mettons qu'on ait 2 tables. Une de recettes et une d'ingrédients.
Dans la table d'ingrédients, j'ai une colonne id_ingredient et une colonne nom_ingredient
Dans la table recettes, j'ai notamment une colonne ref_ingredients où je stocke les id des ingrédients utilisés. Genre ref_ingredients : 10,52,78,132.
Est-il possible directement dans une requête sur la table recettes de récupérer la liste des nomsref_ingrédients ??
alphanono
Messages postés39Date d'inscriptionvendredi 9 mai 2003StatutMembreDernière intervention25 mai 2009 17 sept. 2008 à 14:45
Merci ... mais je savais que ça ne serait pas très claire ... Le SELECT IN c'est ok. Mais c'est pas tout à fait ce que je cherche à faire. Je voudrais pouvoir éviter une requête PHP grâce à SQL si possible.
Je prend un exemple toujours :
TABLE RECETTES :
nom_recetteref_ingredients
1 tarte 10,2,3
J'aimerais pouvoir exécuter une requête qui me permettrait d'avoir en retour :
nom_recetteref_ingredients noms_ingredients
1 tarte 10,2,3 fraise,farine,sucre
C'est peut-être un peu tordu comme ça et c'est sûr que dans cet exemple de recettes, il vaudrait mieux passer par une table intérmédiaire enregistrant 1 id de recette pour 1 id d'ingrédient. Seulement dans mon cas concret ... c'est pas possible.
Vous n’avez pas trouvé la réponse que vous recherchez ?
CREATETABLE Territoire (IdVendeur integer, Ville varchar(20))
INSERTINTO Territoire VALUES(1, 'Paris');
INSERTINTO Territoire VALUES(1, 'Lille');
INSERTINTO Territoire VALUES(1, 'Lyon');
INSERTINTO Territoire VALUES(1, 'Marseille');
INSERTINTO Territoire VALUES(1, 'Bordeaux');
INSERTINTO Territoire VALUES(2, 'Paris');
INSERTINTO Territoire VALUES(2, 'Lyon');
INSERTINTO Territoire VALUES(2, 'Brest');
INSERTINTO Territoire VALUES(3, 'Paris');
WITH px (idVendeur, Villes, Precedente, Niveau)AS
(SELECT IdVendeur, cast(Ville AS varchar(MAX)), cast (ville AS varchar(MAX)), 1
FROM Territoire a WHERE Ville (SELECT min(Ville)FROM Territoire b WHERE a.idVendeur b.idVendeur)
union ALL
SELECT a.IdVendeur, px.Villes + ';' + a.ville, cast(a.Ville AS varchar(max)), Niveau + 1
FROM Territoire a INNERJOIN px ON a.idVendeur = px.idVendeur AND a.Ville > px.Precedente
)
SELECT IdVendeur, Villes
FROM px a WHERE Niveau (SELECT max(Niveau)FROM px b WHERE a.idVendeur b.idVendeur)
C'est ce qui s'appele une CTE common table expression
requete recursive
avec une procedure stockée ou par du code.
il est possible de faire le meme résultat
Je mets l'exemple au cas où un autre membre cherche la même chose mais sur SQL SERVEUR