Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Administration
Administration Forum d'entraide sur l'administration de 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 05/12/2006, 18h26   #1
Membre chevronné
 
Avatar de Sheriff
 
Raoul TALLA
Inscription : octobre 2004
Messages : 607
Détails du profil
Informations personnelles :
Nom : Raoul TALLA

Informations forums :
Inscription : octobre 2004
Messages : 607
Points : 628
Points : 628
Envoyer un message via MSN à Sheriff Envoyer un message via Yahoo à Sheriff Envoyer un message via Skype™ à Sheriff
Par défaut insérer plusieurs enregistrements simultanément

salut à tous.
j'ai un problème d'optimisation.
j'ai un text area où l'on peut saisir des informations à sauvegarder dans une BD.
seulement, je donne la possibilité d'introduire plusieurs éléments, en les séparant par un "retour chariot"
ensuite, à l'aide du explode() de php, j'obtiens un tableau dont j'insère les éléments dans ma BD successivement.
j'aimerais savoir s'il existe un moyen avec mysql de gérer tout celà sans avoir à faire autant de INSERT INTO...
si oui, comment ?
merci et à plus
__________________
Que votre situation soit bonne ou mauvaise, cela va changer...
Sheriff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 20h00   #2
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Oui, en une seule requête, c'est possible, il suffit de séparer les différentes blocs de valeurs.

Code sql :
1
2
3
4
5
INSERT INTO(a, b, c) 
VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9);

Donc, je pense qu'il faut que tu construises ta requête dans une boucle.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 20h58   #3
Membre chevronné
 
Avatar de Sheriff
 
Raoul TALLA
Inscription : octobre 2004
Messages : 607
Détails du profil
Informations personnelles :
Nom : Raoul TALLA

Informations forums :
Inscription : octobre 2004
Messages : 607
Points : 628
Points : 628
Envoyer un message via MSN à Sheriff Envoyer un message via Yahoo à Sheriff Envoyer un message via Skype™ à Sheriff
salut !
Désolu de ne m'être pas bien exprimé...
je reformule :
les données sont à sauvegarder dans une table ne comportant qu'un seul champ.
ces données peuvent être toutes saisies dans un textarea, à condition d'être séparées par un saut de ligne.
jai un code genre
Code :
1
2
3
4
5
 
$tableau=explode("<br />", nl2br($_POST['montextarea']));
		$i=count($tableau);
		FOR(; --$i>=0; )
			mysql_query("INSERT INTO matable VALUES ('".trim($tableau[$i])."')");
existe-t-il un moyen d'insérer les valeurs dans la table en gérant les sauts de ligne avec mysql ?
parceque dans mon cas je fait autant d'INSERT INTO qu'il y a de sauts de ligne...
ou plus simplement, y a-t-il un moyen de gérer tout ceci plus aisément ?
merci et @+
__________________
Que votre situation soit bonne ou mauvaise, cela va changer...
Sheriff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 09h29   #4
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
Oui c'est fortement possible...
Tu peux insérer autant de lignes que tu le souhaites en une seule requete...

Le principe est simple. Tu construis ta requete a l'aide de boucle PHP et ensuite tu l'éxécute....

En gros cela donnerais un truc du style (a toi d'adapter)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
$INSERT = "";
 
FOR ($x=0;$x<count($tableau);$x++) {
 
$INSERT = '\''.trim($tableau[$i]).'\'';
IF ($x!=count($tableau)) {$INSERT .= ',';}
 
}
 
 
mysql_query("INSERT INTO matable VALUES ('".$INSERT."')");
A la limite et pour etre sur de ce que tu envoi....
Tu fais un echo $INSERT avant et un exit; pour voir comment se construit ta requete

@+
cadou
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 11h43   #5
Membre chevronné
 
Avatar de Sheriff
 
Raoul TALLA
Inscription : octobre 2004
Messages : 607
Détails du profil
Informations personnelles :
Nom : Raoul TALLA

Informations forums :
Inscription : octobre 2004
Messages : 607
Points : 628
Points : 628
Envoyer un message via MSN à Sheriff Envoyer un message via Yahoo à Sheriff Envoyer un message via Skype™ à Sheriff
salut !
merci pour ce code, mais il ne fonctionne malheureusement pas :
ma table n'a qu'un seul champ (
Code :
1
2
3
CREATE TABLE `matable` (
`champ` VARCHAR( 50 ) NOT NULL 
);
) ; ton code ne permet pas d'insérer plusieurs valeurs pour un même champ ;
je m'explique : en faisant INSER INTO matable VALUES ('valeur1',...,'valeurn') on insère un seul objet (monobjet_x.valeur1, ..., monobjet_x.valeurn).
poutant j'aimerais insérer monobjet_x en même temps que monobjet_y (monobjet_1.valeur,..., monobjet_n.valeur).
@+
__________________
Que votre situation soit bonne ou mauvaise, cela va changer...
Sheriff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 15h51   #6
Membre Expert
 
Avatar de Sivrît
 
Inscription : février 2006
Messages : 953
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 953
Points : 1 189
Points : 1 189
Dans ce cas il faut juste altérer un poil la syntaxe :
Code php :
1
2
3
4
5
6
7
8
9
10
 
 
$INSERT = "";
for ($x=0; $x<count($tableau); $x++) {
   $INSERT .= "(\'".trim($tableau[$i])."\')";
   if ($x!=count($tableau)) {$INSERT .= ',';}
}
 
 
mysql_query("INSERT INTO matable VALUES ".$INSERT.";");
Sivrît est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 16h05   #7
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
Merci Sivrit...
Effectivement j'avais oublié le point de concaténation pour $INSERT....
Normalement cela devrait fonctionner au poil...

@+
cadou
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h41.


 
 
 
 
Partenaires

Hébergement Web