Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/10/2011, 12h44   #1
Futur Membre du Club
 
Étudiant
Inscription : avril 2009
Messages : 105
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 105
Points : 19
Points : 19
Par défaut problème avec un insert

Bonjour à tous ,

j'essai de faire un insert en récuperant à chaque fois l'id de la ligne au dessus .


je m'explique ,
voici la structure de ma table

matable(id,nom,prenom,id_pere)

Je fais un premier insert comme ceci :

id est en auto increment

Code :
1
2
3
4
5
 
INSERT INTO matable (nom,prenom,id_pere)
    VALUES('toto','tata',1)
 
INSERT INTO matable (nom,prenom,(SELECT id FROM  matable WHERE  id_pere=0));
le but de la deuxieme requete est de recuperer le id de la premiere requete .

MaiS comme je l'effectue la dessus ça ne fonctionne pas .

Merci d'avance pour votre aide
ache93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 13h36   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Saluton,
Je m'interroge sur l'intérêt de tout cela et sur le sens de la phrase
Citation:
Mais comme je l'effectue la dessus ça ne fonctionne pas .
A tout hasard je t'oriente vers LAST_INSERT_ID().
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 13h42   #3
Futur Membre du Club
 
Étudiant
Inscription : avril 2009
Messages : 105
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 105
Points : 19
Points : 19
oublions la phrase qui est effectivement très mal formulé je l'avoue et interessons nous sur la faisabilité de la chose .

Avez vous compris ce que j'essai de faire ?
ache93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 13h59   #4
Futur Membre du Club
 
Étudiant
Inscription : avril 2009
Messages : 105
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 105
Points : 19
Points : 19
En fait ,

Il existe une relation de hiérarchie (père/fils) entre les différentes donnée saisies.

Un père peux avoir plusieurs fils . ce qui fait qu'un même code de père peut apparaître dans plusieurs ligne .

Mais avec le LAST_INSERT_ID on ne récupère que le dernier ID .

Merci
ache93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 14h24   #5
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Pour la gestion des arborescence avec SQL
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/10/2011, 14h44   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
S'il s'agit d'insérer les enfants de toto tata, pourquoi ne pas faire directement ceci ?
Code :
1
2
3
4
5
6
7
INSERT INTO matable (nom, prenom, id_pere)
VALUES ('le_nom', 'le_prenom', 
	SELECT id
	FROM matable
	WHERE nom = 'toto'
		AND prenom = 'tata'
)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 15h08   #7
Membre expérimenté
 
Avatar de neilbgr
 
Inscription : août 2004
Messages : 584
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 584
Points : 589
Points : 589
+1 pour Maljuna Kris
__________________
"Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
"Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
"Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry
neilbgr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 15h09   #8
Futur Membre du Club
 
Étudiant
Inscription : avril 2009
Messages : 105
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 105
Points : 19
Points : 19
Merci pour votre aide ,

J'ai essayé ce type de requete mais ça ne marche pas


j'ai cette erreur

Citation:

You can't specify target table 'matable' for update in FROM clause
ache93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 22h10   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Je t'ai donné une requête INSERT et tu as un message qui dit :
Citation:
You can't specify target table 'matable' for update in FROM clause
Bizarre non ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 22h23   #10
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Un coup de fatigue CinePhil ? Syntaxiquement ce serait plutôt :
Code :
1
2
3
4
5
INSERT INTO matable (nom, prenom, id_pere)
SELECT 'le_nom', 'le_prenom', id
  FROM matable
 WHERE nom = 'toto'
   AND prenom = 'tata'
Mais je ne comprends pas le besoin, pour moi l'id_pere devrait être connu applicativement au moment de faire l'INSERT (surtout si on connait le nom et le prenom du père...)
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 23h30   #11
Futur Membre du Club
 
Étudiant
Inscription : avril 2009
Messages : 105
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 105
Points : 19
Points : 19
Il manque pas le value par hasard dans votre requete ?
ache93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 23h45   #12
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Ben non c'est un INSERT INTO SELECT...
Une syntaxe classique pour insérer plusieurs lignes mais si le SELECT ne renvoie qu'une ligne alors ça n'insere qu'une ligne.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 09h51   #13
Futur Membre du Club
 
Étudiant
Inscription : avril 2009
Messages : 105
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 105
Points : 19
Points : 19
OK ça fonctionne merci Beaucoup pour votre aide
ache93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 14h00   #14
Futur Membre du Club
 
Étudiant
Inscription : avril 2009
Messages : 105
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 105
Points : 19
Points : 19
Bonjour ,

j'ai maintenant le meme probleme de hierarchie qui se pose mais cette fois ci le prblème est entre differentes tables .

En fait ,

je dois récupérer l'identifiant ID de la table ma table et le réustiliser dans une autre table dans laquelle je gére les roles . et qui contient un identifiant unique mais aussi une clé étrangere id_matable qui fait référence a l'identifiant unique de matable .

j'ai essayé comme ceci mais ça ne fonctionne pas .

structures de roles :
roles(id_role,id_matable,libelle_role)
Code :
1
2
3
4
5
6
 
 
INSERT INTO roles (id_matable,libelle_role)
		SELECT id,'ADMIN'
		FROM matable  
            WHERE matable.nom='toto';
ache93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 14h13   #15
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Syntaxiquement, ta requête semble juste.
Citation:
mais ça ne fonctionne pas
Symptômes ?

La structure de la table roles (que tu devrais nommer au singulier) est bizarre.

Que représente id_matable ? Des vrais noms ça aide à comprendre !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 11h42   #16
Futur Membre du Club
 
Étudiant
Inscription : avril 2009
Messages : 105
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 105
Points : 19
Points : 19
Bonjour ,

merci encore pour votre aide j'arrive à faire ce que je veux , mais maintenant y'a t'il un moyen de vérifier les doublons lors de l'insert .

merci
ache93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h06.


 
 
 
 
Partenaires

Hébergement Web