Requete sql INSERT INTO + SELECT (php)

melanie75
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 13 Avr 2011

Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 8:02

Bonjour,
Je vous écris car j'ai grandement besoin de votre aide.
J'ai 5 tables sur MySQL et je voudrais insérer certains champs dans ces 5 tables dans une seule.
Voici la requête que j'ai fais dans un fichier *.php, cependant elle ne fonctionne pas mais ne me revois aucune erreur.

Code: Tout sélectionner
$sql="INSERT INTO relait_mip.gg_eleves 
SELECT gg_resp1.UAJ, gg_resp1.ANNEE_SCOLAIRE, gg_el1.ELEVE_ID, gg_el1.ELENOET, gg_el1.NOM, gg_el1.PRENOM, gg_structure.CODE_STRUCTURE, gg_structure.LIBELLE_LONG, gg_structure.CODE_MEF, mip_diplomes.type_dip, mip_diplomes.libelle, gg_el1.DATE_NAISS, gg_resp3.LIGNE1_ADRESSE, gg_resp3.LIGNE2_ADRESSE, gg_resp3.LIGNE3_ADRESSE, gg_resp3.CODE_POSTAL, gg_resp3.LL_PAYS, gg_resp3.LIBELLE_POSTAL, gg_resp3.COMMUNE_ETRANGERE
FROM relait_mip.gg_el1, relait_mip.gg_el2, relait_mip.gg_resp1, relait_mip.gg_resp2, relait_mip.gg_resp3, relait_mip.gg_structure, relait_mip.gg_mef_dip, relait_mip.mip_diplomes
WHERE gg_el1.ELEVE_ID = gg_resp2.ELEVE_ID2
AND gg_resp1.PERSONNE_ID = gg_resp2.PERSONNE_ID2
AND gg_resp1.ADRESSE_ID = gg_resp3.ADRESSE_ID3
AND gg_el2.CODE_STRUCTURE9 = gg_structure.CODE_STRUCTURE
AND gg_structure.CODE_MEF = gg_mef_dip.CODE_MEF
AND gg_mef_dip.code_diplome = mip_diplomes.c_diplome";


$req=mysql_query($sql)or die (mysql_error());


Je n'arrive pas a comprendre ce qui cloche.
J'aimerais beaucoup avoir votre aide.
Merci à tous !
Mélanie


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Re: Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 8:07

Tu nous facilites pas vraiment la tâche pour t'aider la.

Si on pouvait avoir :
- un descriptif de chaque table
- t'es sur que ta requete select est bonne ?
Dernière édition par YoyoS le Mer Avr 13, 2011 8:12, édité 2 fois.


Blount
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 430
Inscription: 18 Nov 2010

Re: Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 8:10

Il faut spécifier les colonnes :
Code: Tout sélectionner
INSERT INTO relait_mip.gg_eleves (column1, column2, columnX) SELECT …


De plus, utilise plutôt les jointures avec « JOIN ».
Tu peux aussi nous donner l'erreur générée (mysql_error).


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Re: Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 8:14

Le seul cas ou il n'est pas utile de spécifier le nom des colonnes, c'est dans le cas ou la structure de la table d'arrivée et la même que le résultat de ta requête select.

Il doit donc y avoir un souci dans ta requête de sélection. Ou bien oui spécifie les colonnes manuellement.

melanie75
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 13 Avr 2011

Re: Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 8:22

J'ai spécifiée les noms des colonnes mais ça ne marche toujours pas.
De plus mysql_error() ne me renvois aucune erreur.
En fait, c'est comme si la requête s’exécutait parfaitement sauf que les données ne sont pas enregistrées dans la table.

Pour le SELECT j'ai l'impression qu'elle est bonne oui.

Code: Tout sélectionner
$sql="INSERT INTO relait_mip.gg_eleves (UAJ, ANNEE_SCOLAIRE, ELEVE_ID, ELENOET, NOM, PRENOM, CODE_STRUCTURE, LIBELLE_LONG, CODE_MEF, TYPE_DIP, LIBELLE_DIP, DATE_NAISS, ADRESSE1, ADRESSE2, ADRESSE3, CODE_POSTAL, LL_PAYS, LIBELLE_POSTAL, COMMUNE_ETRANGERE)
SELECT gg_resp1.UAJ, gg_resp1.ANNEE_SCOLAIRE, gg_el1.ELEVE_ID, gg_el1.ELENOET, gg_el1.NOM, gg_el1.PRENOM, gg_structure.CODE_STRUCTURE, gg_structure.LIBELLE_LONG, gg_structure.CODE_MEF, mip_diplomes.type_dip, mip_diplomes.libelle, gg_el1.DATE_NAISS, gg_resp3.LIGNE1_ADRESSE, gg_resp3.LIGNE2_ADRESSE, gg_resp3.LIGNE3_ADRESSE, gg_resp3.CODE_POSTAL, gg_resp3.LL_PAYS, gg_resp3.LIBELLE_POSTAL, gg_resp3.COMMUNE_ETRANGERE
FROM relait_mip.gg_el1, relait_mip.gg_el2, relait_mip.gg_resp1, relait_mip.gg_resp2, relait_mip.gg_resp3, relait_mip.gg_structure, relait_mip.gg_mef_dip, relait_mip.mip_diplomes
WHERE gg_el1.ELEVE_ID = gg_resp2.ELEVE_ID
AND gg_resp1.PERSONNE_ID = gg_resp2.PERSONNE_ID2
AND gg_resp1.ADRESSE_ID = gg_resp3.ADRESSE_ID3
AND gg_el2.CODE_STRUCTURE9 = gg_structure.CODE_STRUCTURE
AND gg_structure.CODE_MEF = gg_mef_dip.CODE_MEF
AND gg_mef_dip.code_diplome = mip_diplomes.c_diplome";

$req=mysql_query($sql)or die (mysql_error());



Pour les jointures avec JOIN je n'en ai jamais fait, j'ai toujours fait comme ça du coup je ne sais pas trop comment il faut faire (LEFT JOIN, RIGHT JOIN, JOIn etc. )

melanie75
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 13 Avr 2011

Re: Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 8:28

Voici un descriptif de chaque tables que j'utilise:


Code: Tout sélectionner
# --------------------------------------------------------

#
# Structure de la table `gg_el1`
#

CREATE TABLE `gg_el1` (
  `UAJ` varchar(110) NOT NULL default '',
  `ANNEE_SCOLAIRE` varchar(110) NOT NULL default '',
  `ELEVE_ID` varchar(110) NOT NULL default '',
  `ELENOET` varchar(110) NOT NULL default '',
  `NOM` varchar(110) NOT NULL default '',
  `PRENOM` varchar(110) NOT NULL default '',
  `DATE_NAISS` varchar(110) NOT NULL default '',
  `CODE_MOTIF_SORTIE` varchar(110) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# --------------------------------------------------------

#
# Structure de la table `gg_el2`
#

CREATE TABLE `gg_el2` (
  `ELEVE_ID7` varchar(110) NOT NULL default '',
  `CODE_STRUCTURE9` varchar(110) NOT NULL default '',
  `TYPE_STRUCTURE` varchar(110) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# --------------------------------------------------------

#
# Structure de la table `gg_eleves`
#

CREATE TABLE `gg_eleves` (
  `UAJ` varchar(20) NOT NULL default '',
  `ANNEE_SCOLAIRE` varchar(4) NOT NULL default '',
  `ELEVE_ID` varchar(20) NOT NULL default '',
  `ELENOET` varchar(20) NOT NULL default '',
  `NOM` varchar(30) NOT NULL default '',
  `PRENOM` varchar(30) NOT NULL default '',
  `CODE_STRUCTURE` varchar(30) NOT NULL default '',
  `LIBELLE_LONG` varchar(90) NOT NULL default '',
  `CODE_MEF` varchar(15) NOT NULL default '',
  `TYPE_DIP` varchar(60) NOT NULL default '',
  `LIBELLE_DIP` varchar(120) NOT NULL default '',
  `DATE_NAISS` varchar(30) NOT NULL default '',
  `ADRESSE1` varchar(90) NOT NULL default '',
  `ADRESSE2` varchar(90) NOT NULL default '',
  `ADRESSE3` varchar(90) NOT NULL default '',
  `CODE_POSTAL` varchar(6) NOT NULL default '',
  `LL_PAYS` varchar(90) NOT NULL default '',
  `LIBELLE_POSTAL` varchar(90) NOT NULL default '',
  `COMMUNE_ETRANGERE` varchar(90) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# --------------------------------------------------------

#
# Structure de la table `gg_mef_dip`
#

CREATE TABLE `gg_mef_dip` (
  `CODE_MEF` varchar(11) NOT NULL default '',
  `CODE_DIPLOME` int(8) NOT NULL default '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# --------------------------------------------------------

#
# Structure de la table `gg_resp1`
#

CREATE TABLE `gg_resp1` (
  `VERSION` varchar(110) NOT NULL default '',
  `UAJ` varchar(110) NOT NULL default '',
  `ANNEE_SCOLAIRE` varchar(110) NOT NULL default '',
  `DATE_EXPORT` varchar(110) NOT NULL default '',
  `HORODATAGE` varchar(110) NOT NULL default '',
  `PERSONNE_ID` varchar(110) NOT NULL default '',
  `LC_CIVILITE` varchar(110) NOT NULL default '',
  `LL_CIVILITE` varchar(110) NOT NULL default '',
  `NOM` varchar(110) NOT NULL default '',
  `PRENOM` varchar(110) NOT NULL default '',
  `TEL_PERSONNEL` varchar(110) NOT NULL default '',
  `TEL_PORTABLE` varchar(110) NOT NULL default '',
  `ACCEPTE_SMS` varchar(110) NOT NULL default '',
  `TEL_PROFESSIONNEL` varchar(110) NOT NULL default '',
  `MEL` varchar(110) NOT NULL default '',
  `COMMUNICATION_ADRESSE` varchar(110) NOT NULL default '',
  `ADRESSE_ID` varchar(110) NOT NULL default '',
  `CODE_PROFESSION` varchar(110) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# --------------------------------------------------------

#
# Structure de la table `gg_resp2`
#

CREATE TABLE `gg_resp2` (
  `ELEVE_ID` varchar(110) NOT NULL default '',
  `PERSONNE_ID2` varchar(110) NOT NULL default '',
  `RESP_LEGAL` varchar(110) NOT NULL default '',
  `CODE_PARENTE` varchar(110) NOT NULL default '',
  `RESP_FINANCIER` varchar(110) NOT NULL default '',
  `PERS_PAIEMENT` varchar(110) NOT NULL default '',
  `PERS_CONTACT` varchar(110) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# --------------------------------------------------------

#
# Structure de la table `gg_resp3`
#

CREATE TABLE `gg_resp3` (
  `ADRESSE_ID3` varchar(110) NOT NULL default '',
  `LIGNE1_ADRESSE` varchar(110) NOT NULL default '',
  `LIGNE2_ADRESSE` varchar(110) NOT NULL default '',
  `LIGNE3_ADRESSE` varchar(110) NOT NULL default '',
  `LIGNE4_ADRESSE` varchar(110) NOT NULL default '',
  `CODE_POSTAL` varchar(110) NOT NULL default '',
  `CODE_PAYS` varchar(110) NOT NULL default '',
  `CODE_COMMUNE_INSEE` varchar(110) NOT NULL default '',
  `LL_PAYS` varchar(110) NOT NULL default '',
  `CODE_DEPARTEMENT` varchar(110) NOT NULL default '',
  `LIBELLE_POSTAL` varchar(110) NOT NULL default '',
  `COMMUNE_ETRANGERE` varchar(110) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# --------------------------------------------------------

#
# Structure de la table `gg_structure`
#

CREATE TABLE `gg_structure` (
  `VERSION` varchar(200) NOT NULL default '',
  `UAJ` varchar(200) NOT NULL default '',
  `ANNEE_SCOLAIRE` text NOT NULL,
  `DATE_EXPORT` text NOT NULL,
  `HORODATAGE` text NOT NULL,
  `CODE_STRUCTURE` text NOT NULL,
  `LIBELLE_LONG` varchar(200) NOT NULL default '',
  `CODE_RNE` varchar(200) NOT NULL default '',
  `CODE_MEF` varchar(11) NOT NULL default '',
  `CODE_STRUCTURE2` varchar(200) NOT NULL default '',
  `LIBELLE_LONG3` text NOT NULL,
  `CODE_RNE4` varchar(200) NOT NULL default '',
  `CODE_MEF5` varchar(200) NOT NULL default '',
  `CODE_STRUCTURE6` varchar(200) NOT NULL default '',
  KEY `CODE_MEF` (`CODE_MEF`),
  KEY `UAJ` (`UAJ`,`CODE_MEF`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

# --------------------------------------------------------

#
# Structure de la table `mip_diplomes`
#

CREATE TABLE `mip_diplomes` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `c_diplome` varchar(255) default NULL,
  `type_dip` varchar(255) default NULL,
  `spe` varchar(255) default NULL,
  `libelle` varchar(255) default NULL,
  `date_creation` datetime default NULL,
  `abrogation` datetime default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `c_diplome` (`c_diplome`),
  KEY `type_dip` (`type_dip`),
  KEY `spe` (`spe`),
  KEY `date_creation` (`date_creation`)
) ENGINE=MyISAM AUTO_INCREMENT=3766 DEFAULT CHARSET=latin1 AUTO_INCREMENT=3766 ;


melanie75
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 13 Avr 2011

Re: Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 8:29

Pensez vous que ça peut venir du fait que certaines tables soient en InnoDB et d'autres en MyISAM ?!


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Re: Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 8:34

Non je ne crois pas, par contre tu dois vérifier les types des champs que tu essaies d'insérer dans la table de destination, ils doivent être les mêmes et de même longueur.

melanie75
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 13 Avr 2011

Re: Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 8:59

J'ai mis tous les champs du même type et de même longueur que les champs des tables que j'importe mais toujours pareil ..
Rien ne se produit :(

silef
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 317
Inscription: 13 Jan 2006

Re: Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 11:46

Je pense qu'il manque simplement VALUES dans ta requete.

Celle ci doit ressembler à quelquechose comme ça : INSERT INTO matable (champ1, champ2) VALUES (SELECT champ1, champ2 FROM matable2)

ps: fais bien attention au format des champs que tu récupères ils doivent être du même type que ceux dans lesquels tu essaies de les ajouter.


Blount
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 430
Inscription: 18 Nov 2010

Re: Requete sql INSERT INTO + SELECT (php)

Message le Mer Avr 13, 2011 12:57

Non, il ne faut pas mettre VALUES.

Montre nous ta portion de code PHP (un peu plus de code).


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités