plusieurs INSERT voire meme des milliers - SQL/NoSQL - Programmation
Marsh Posté le 11-04-2008 à 21:07:52
Code :
|
une requête. rapide.
Marsh Posté le 14-04-2008 à 12:29:16
Ah c genial, merci bp MagicBuzz,
c'est vrai c'est trop rapide
juste une petite correction, ca pourrait t'etre utile, la syntaxe est :
Code :
|
sans 'values'
@+
Marsh Posté le 14-04-2008 à 12:44:55
Ayeye, une toute petite subtilite
dans mon exemple id_mailing est une valeur fixe, comment pourrais je executer cette requete?
une derniere question, est il possible d'inserer un enregistrement dans 2 tables en une seule requete ???
Merci infiniment
Marsh Posté le 14-04-2008 à 23:17:38
ben avec la syntaxe que j'ai utilisé mais sans la value effectivement. $id_mailing pour que php mette en dur ta valeur lors de l'exécution de la requête. t'as tout à fait le droit de sélectionner des constantes en SQL.
Marsh Posté le 15-04-2008 à 10:56:31
ah oauisssss, c'est parfait, je pensais que le '$' etait une erreur de ta part comme pour 'value'
et a ton avis c'est possible de fait un INSERT dans 2 tables en une seukle requete????
merci mille fois, tu me sauves
Marsh Posté le 16-04-2008 à 18:47:39
non, c'est impossible.
enfin... dans une certaine mesure...
si tes deux tables sont par exemple liées par une FK, tu peux par exemple écrire une vue qui ramène les lignes des deux tables selon la FK.
selon ton SGBD, tu pourras directement modifier les données dans la vue, et ajouter un trigger sur la vue afin de gérer l'insertion : t'insère dans la vue, et le trigger s'occupe d'inserrer dans chacune des deux tables.
exemple ici sous SQL Server 2005 :
http://forum.hardware.fr/hfr/Progr [...] m#t1447148
Marsh Posté le 13-05-2008 à 18:03:57
Bonjour, me revoila encore pour une autre petite question
j'explique mon probleme :
je viens de finir l'ppli mailing que j'ai developpe, et il me reste juste a afficher une page qui affiche les message envoyes (elements envoyes sur outlook).
lorsqu'un mail est envoyer, je stoque l'identifiant des destinataires dans un champs TEXT separe par ~ : 100102~100135~101785.... je fait cela pour ne pas charger la base au bout de qlq temps.
1ere question, es tu favorable pour cette solution??
ma 2eme question:
afin d'afficher les elements envoye, je dois selectionner les destinataires et les inserer ds une autre table.
y a t il une requete simple pour faire ceci, une requete du genre INSERT SELECT ... mais le SELECT ici dois me separer les identifiants
merci bien
Marsh Posté le 14-05-2008 à 19:21:35
1/ Je n'aime pas ce genre de solution, car c'est de la dénormalisation, donc à éviter. Ensuite, pour des raisons de performances, et éventuellement parceque ça ne sert jamais, il peut être préférable de dénormaliser cependant.
2/ Crée une fonction "split" qui retournera une "table" à partir de ton champ text. Tu trouveras sur google, mais aussi sur ce forum, des exemple d'une telle fonction. Je me demande si sous MySQL elle n'existe pas d'ailleurs nativement...
Marsh Posté le 15-05-2008 à 10:37:58
Bonjour MagicBuzz et merci pour ta reponse!
j'ai finalement opter pour la solution normalisé, je mettrai ulterierement une possibilite d'archivage...
il parait qu'une table mysql peut supporter qlq millions d'enregistrement, est ce correcte? et quelles sont les consequences si une table sature? ca influence toute la base???
Marsh Posté le 15-05-2008 à 20:57:14
oui, mysql supporte sans problème des millions de lignes dans une table
pour saturer une table mysql, il faut en vouloir (à quelques milliards tu commences juste à te dire que ton PC à la maison est un peu juste)
ensuite, t'as des tas de façon de pallier à des problèmes de saturation : partion des tables par exemple
Marsh Posté le 16-05-2008 à 10:41:37
OK, ca me laisse alors le temps de bien respirer...
Merci pour tout MagicBuzz
@+
Marsh Posté le 11-04-2008 à 18:30:32
Bonjour tout le monde,
Je suis entrain de faire un outil de mailing et je bloque sur un ptit truc que j'arrive pas a surmonter...!!! votre conseil est vrmt le bienvenu
avt d'envoyer un mail, je fais une recherche pour selectionner les destinataires, et c'est la ou le probleme ce pose, ces destinataire je les stock ds une table qui contient 2 champs (id_mailing, id_destinataire) :
$sel = mysql_query("SELECT id FROM annuaire WHERE ma_condition" );
while($res = mysql_fetch_array($sel))
{
$ins = mysql_query("INSERT INTO ma_table (id_mailing, id_destinataire) VALUES ('$id_mailing', '$res[id]')" );
}
lorsque j'ai une 20en ou 50ene de destinataires ca va, mais dès lors que ca depasse 100, ca commence a mettre du temps et ca bloque carrement au dessus de 900 ou 1000 destinataires
devrais je stocker les destinataires ds un champ separes par un separateur???
que me conseillez vous faire?
j'ai egelement teste $ins = mysql_query("INSERT INTO ma_table (champ1, champ2) VALUES ('val1', 'val2'), ('val1', 'val2'), ('val1', 'val2')" );
mais ca bloque quand j'ai beaucoup de destinataires...