Insérer des données avec une seule commande

Insérer des données avec une seule commande - SQL/NoSQL - Programmation

Marsh Posté le 21-08-2006 à 17:24:41    

Bonjour,
 
Je voudrais insérer dans une table (mailingliste) environ 20000 adresses que j'ai sous le format suivant :
 
adresse1@truc.com
adresse2@truc.com
adresse3@truc.com
adresse4@truc.com
adresse5@truc.com
etc...
 
Comment puis-je insérer ces adresses par blocs je suppose de 1000 par exemple dans ma table mailingliste à la suite de celles que j'ai déjà ?
 
J'ai pensé à une syntaxe du type :  
INSERT INTO `mailingliste` VALUES (' adresse1@truc.com'); mais je devrais modifier chaque adresse pour rajouter le INSERT INTO `mailingliste' etc...
 
Ma question est la suivante : existe-t-il une syntaxe du type  
INSERT INTO `mailingliste` VALUES ('adresse1@truc.com','adresse2@truc.com','adresse3@truc.com'); qui permettrai d'insérer plusieurs adresses à la fois (chacune dans un champ).  
Y a-t-il un nombre limite d'adresses pour cette requête ?
 
Merci pour vos conseils.

Reply

Marsh Posté le 21-08-2006 à 17:24:41   

Reply

Marsh Posté le 21-08-2006 à 17:29:31    

La première requete est la bonne.  
 
Pas possible avec la seconde
 
Tu peux faire un fichier SQL qui contient tes 20000 lignes à insérer.
 
INSERT INTO `mailingliste` VALUES (' adresse1@truc.com');
INSERT INTO `mailingliste` VALUES (' adresse2@truc.com');
...
 
Sinon il faut faire un fichier plat avec tes adresses et un SQLLoader, enfin ça dépend de ton SGBD.


Message édité par dlaumor le 21-08-2006 à 17:29:52
Reply

Marsh Posté le 21-08-2006 à 17:30:03    

si mysql tu peux faire  

Code :
  1. INSERT INTO mailingliste(nomchamp)
  2. VALUES (('adresse1@truc.com'),('adresse2@truc.com'),...,('adressen@truc.com'))


Message édité par betsamee le 21-08-2006 à 17:30:42
Reply

Marsh Posté le 21-08-2006 à 18:13:30    

Ah oui ça ça m'intéresse :

Citation :

INSERT INTO mailingliste(nomchamp) VALUES (('adresse1@truc.com'),('adresse2@truc.com'),...,('adressen@truc.com'))


Ok !
 
Ce qui me fait ch..r c'est d'avoir à insérer des caratères aux 20 000 adresses.
 
Avec Ultraedit je peux par exemple remplacer .com par .com'), mais pour ajouter le (' au début de l'adresse c'est galère à moins que se soit possible sous excel ?

Reply

Marsh Posté le 21-08-2006 à 18:20:12    

Si MySQL, tu trouvera peut être des choses en cherchant dans la doc du côté de "LOAD DATA" [:figti]

Reply

Marsh Posté le 21-08-2006 à 18:20:39    

avec excel et une pitite macro tu peux facilement creer le buffer de te requete  
boucle sur chaque ligne et fait "('"& Cells(i,1) &"')," apres c'est deux trois ptites modifs manuelles et c est bon
EDIT : selon le format de ton fichier d entree tu peux comme indique utiliser LOAD DATA INFILE en precisant bien tes delimiteurs de champs/lignes


Message édité par betsamee le 21-08-2006 à 18:21:47
Reply

Marsh Posté le 21-08-2006 à 19:20:57    

et avec ultraedit tu peux faire des regex

Reply

Marsh Posté le 21-08-2006 à 20:01:48    

Bah je connais pas les regex ; c'est quoi :heink: ???

Reply

Marsh Posté le 21-08-2006 à 20:53:32    

lance l'aide d'ultraedit et regarde les "regular expression"
en francais ce sont les expressions régulières

Reply

Marsh Posté le 21-08-2006 à 21:40:30    

Oui c'est exactement ce que je cherchais :
 
$ va ajouter  '),   (en fin de ligne)
% va ajouter ('     (en début de ligne) + si je veux mon INSERT INTO etc...
 
Ensuite un simple copier/coller et j'envoie tout ça dans ma bdd !!!
 
Franchement génial cet ULTRAEDIT et merci à tous !!
 
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  
 :hello:  :hello:  

Reply

Marsh Posté le 21-08-2006 à 21:40:30   

Reply

Marsh Posté le 21-08-2006 à 21:49:23    

J'ai encore une question : que se passe t-il s'il y a déjà une adresse identique à une que j'ajoute ; est-elle ajoutée quand même, est-elle ignorée ?

Reply

Marsh Posté le 21-08-2006 à 21:54:29    

ca depend de la definition de ton champ "adresse" (si il tolere les doublons ou pas)
ca depend de ce que tu veux en faire mais si tu veux eviter les doublons je te conseille de regarder la syntaxe de la commande Replace into au lieu de INSERT INTO

Reply

Marsh Posté le 21-08-2006 à 22:20:25    

Tu veux dire qu'au lieu de  
INSERT INTO `mailingliste` VALUES (' adresse1@truc.com');
 
il vaudrait mieux mettre :
 
REPLACE INTO `mailingliste` VALUES (' adresse1@truc.com');  
 

Reply

Marsh Posté le 21-08-2006 à 22:22:03    

oui

Reply

Marsh Posté le 21-08-2006 à 23:03:51    

Ok nickel Merci !!! ;)

Reply

Marsh Posté le 21-08-2006 à 23:08:26    

dexenium a écrit :

Tu veux dire qu'au lieu de  
INSERT INTO `mailingliste` VALUES (' adresse1@truc.com');
 
il vaudrait mieux mettre :
 
REPLACE INTO `mailingliste` VALUES (' adresse1@truc.com');

Je pense que le traitement des doublons dépendra de la définition de cette colonne. Si elle accepte les doublons, à mon avis, le REPLACE se comportera exactement comme le INSERT : il ajoutera un enregistrement sans se poser de questions [:figti]  

Reply

Marsh Posté le 22-08-2006 à 07:43:19    

mrbebert a écrit :

Je pense que le traitement des doublons dépendra de la définition de cette colonne. Si elle accepte les doublons, à mon avis, le REPLACE se comportera exactement comme le INSERT : il ajoutera un enregistrement sans se poser de questions [:figti]


oui c'est ce que je disais
mais si elle n'accepte pas les doublons l'INSERT echouera en cas de doublon alors que le REPLACE non

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed