begin process at 2010 02 10 06:15:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

MySQL

 > 

Requêtes

 > 

SELECT rapatriement multiple de données suivant liste id à virgule


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SELECT rapatriement multiple de données suivant liste id à virgule

mardi 16 septembre 2008 à 20:05:14 | SELECT rapatriement multiple de données suivant liste id à virgule

alphanono

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 SELECT sur la table recettes de récupérer la liste des noms des ingrédients suivant la liste à virgule des ids renseignée dans ref_ingrédients ??

Heu ... j'ai été claire là ? ...

mardi 16 septembre 2008 à 21:21:39 | Re : SELECT rapatriement multiple de données suivant liste id à virgule

nhervagault

Administrateur CodeS-SourceS
Salut

C'est que ta base est mal modélisée, il faut faire une table intermédiaire.

Avec un select in (1,2,3,..) peut etre que tu y arriveras.


mardi 16 septembre 2008 à 22:28:27 | Re : SELECT rapatriement multiple de données suivant liste id à virgule

alphanono

okok ... et à part ça, quelqu'un a une idée ?

mercredi 17 septembre 2008 à 14:10:16 | Re : SELECT rapatriement multiple de données suivant liste id à virgule

crn_c21

SELECT Nom_Ingredient FROM ingrédientswhere Id_Ingredient IN (10,52,78,132)

par exemple

ou

SELECT Nom_Ingredient FROM
ingrédients where Id_Ingredient IN (SELECT ref_ingredient FROM recette WHERE Nom_recette='Tarte Citron')


mercredi 17 septembre 2008 à 14:45:17 | Re : SELECT rapatriement multiple de données suivant liste id à virgule

alphanono

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 :
id_recette     nom_recette    ref_ingredients
1              tarte          10,2,3

TABLE INGREDIENTS
id_ingredient  nom_ingredient
2              farine
3              sucre
10             fraise

J'aimerais pouvoir exécuter une requête qui me permettrait d'avoir en retour :

id_recette     nom_recette    ref_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.

mercredi 17 septembre 2008 à 14:55:29 | Re : SELECT rapatriement multiple de données suivant liste id à virgule

crn_c21

Je vois pa le truc possible en une seule requète, vaudrai mieux passer par une procédure stockée!!
mercredi 17 septembre 2008 à 19:29:49 | Re : SELECT rapatriement multiple de données suivant liste id à virgule

nhervagault

Administrateur CodeS-SourceS
En sqlserver 2005,

On a (extrait de http://www.developpez.net/forums/d33411-2/bases-donnees/langage-sql/creation-faq-sql-voulez-participer/)

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

Bon coding



Cette discussion est classée dans : liste, select, id, virgule, ingrédients


Répondre à ce message

Sujets en rapport avec ce message

Faire plusieurs if dans un procedure stockee [ par chris81 ] bonjour,comment puis je faire pour verifier plusiseurs if dans la meme procedure stockee c'est a direif not exist(SELECT Id FROM...) et if not exists( Select sans doublon avec date la plus recente [ par ironnyc ] Bonjour a tous!je cherche a faire une requete Select avec une base MySql sur la table suivante: #Table "historique"+-----+-------------+------------+| Select lent avec Inner Join et Order [ par vincentstryckmans ] Bonjour,Je souhaite trier une table table1 en fonction d'un champ d'une table2.Ces deux tables ont un champ qui les lient : table1.id_table2 et table2 Select Distinct sur une colonne [ par thiosyiasar ] Bonjour,Je veux récupérer une liste d'utilisateur dans une table utilisateur. (id, nom, prénom, email)L'application qui alimente la table ne prend pas update avec select avec group by ... ouille :-/ [ par loic72 ] bonsoir,j'ai une question pour ceux qui métrisent les requete update aliant les select qui utilisent les group by?Je m'explique. Voici ma requete vous Requete Imbriqué Erreur Aussi :s [ par SF2Boss ] Voici La requete Rebelle : SELECT </s utilisation de IsEmpty() [ par bootchoz ] bonjour, je n'arrive pas à utiliser cette fonction.je voudrais verifier si un select me renvoit une cellule vide. J'avais ecrit cela mais @var ne vaut Select paginé [ par thiosyiasar ] Bonjour a tous,Pour une page aspx, je voudrais faire un select paginé du genre : SELECT TOP (@nb_ligne) * FROM newsletter WHERE nlt_id in(  SELECT nlt Problème de select multiples dans plusieurs tables [ par superseb801 ] bonjour, J'ai un problème, je voudrais faire une requête sur plusieurs tables en même temps (3 pour être plus précis), et avec d'autres SELECT dans le PROBLEME REQUETE SELECT [ par brute ] Bonjour,J'ai un probleme de REQUETE SELECT avec ORacle  .J4ai une table avec 4 colonnes, ID, FACE, PARAM, VALEURl'ID prend les valeurs (1 ou 2 ou 3 ou


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales