besoin de votre avis sur un insert dans une boucle

besoin de votre avis sur un insert dans une boucle - PHP - Programmation

Marsh Posté le 01-12-2004 à 19:12:54    

Voilà je mets au point un service de messagerie interne pour mon site.
Pour d'écrire rapidement il y a un attribut dans ma table qui indique statut 1 = message lu
statut 2 = message non lu.
statut 3 = message dans la corbeille.
 
Ensuite un attribut id_contact qui prend comme valeur le destinataire du message. Donc quand un user se connecte à sa boite y a un select*from messagerie where id_contact = '$session->id_contact'.
 
Le but étant que les visiteurs s'échangent des messages privés. Mais voilà moi l'admin, je veux pouvoir envoyer de temps en temps des messages à tous les inscrits.
J'ai donc pensé à un insert dans une boucle.

Code :
  1. $requete = mysql_query (Select id_contact from user,$serveur, $login, $motDePasse);
  2. while ($resultat = mysql_fetch_object ($requete));
  3.       {
  4. mysql_query (INSERT INTO messagerie SET (id_contact,statut,message) VALUE ('$resultat->id_contact','2','$mon_message'),$serveur, $login, $motDePasse);
  5.       }


Alors ma question: en sachant qu'il peut y a avoir des milliers d'user est-ce que cet INSERT dans une boucle ne sera pas trop lourd ? Je fais mes armes en PHP et Mysql sur ce site et je n'ai aucune experience en matière de bouffage de ressource des requetes.  Je précise qu'il y aura bien que moi qui pourra faire cette requete et qu'à la limite je pourrai la faire en heure creuse.
Qu'en pensez-vous ?


Message édité par Scarf3ss3 le 01-12-2004 à 19:13:55
Reply

Marsh Posté le 01-12-2004 à 19:12:54   

Reply

Marsh Posté le 01-12-2004 à 19:22:57    

Je ne sais pas si ça changera beaucoup de choses au niveau optimisation (et je suppose que la réponse est soit "carrément" soit "pas du tout" ), mais perso je ferais un seul insert, la boucle servant alors à concaténer les différentes parties de celui-ci.
 
Mais le mieux je pense, si le schéma de ton truc l'y autorise, serait de définir une valeur spéciale pour id_contact qui signifierait "tout le monde".


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-12-2004 à 19:27:01    

Sielfried a écrit :

Je ne sais pas si ça changera beaucoup de choses au niveau optimisation (et je suppose que la réponse est soit "carrément" soit "pas du tout" ), mais perso je ferais un seul insert, la boucle servant alors à concaténer les différentes parties de celui-ci.
 
Mais le mieux je pense, si le schéma de ton truc l'y autorise, serait de définir une valeur spéciale pour id_contact qui signifierait "tout le monde".


Oui justement j'y ai pensé mais à ce moment là comment prendre en compte les messages lu, non lu et corbeille ?
On ne peut pas...
 
Sinon je suis désolé mais je n'ai pas compris la première partie de ton message
 
Edit: ah si j'ai compris, effectivement cette solution est interessante !
je suis interessé d'avoir un avis.


Message édité par Scarf3ss3 le 01-12-2004 à 19:29:03
Reply

Marsh Posté le 01-12-2004 à 22:56:55    

Je suis désolé de faire un  :bounce: mais je n'ai pas eu de réponse !
A ma place que feriez vous alors ?

Reply

Marsh Posté le 01-12-2004 à 23:03:14    

Perso en tout cas j'ai un système de messagerie sur mon site et je fais comme ça (car effectivement j'ai aussi les notions de lu/non lu etc). Cela dit j'ai assez peu de membres.
 
Ce qui est sûr c'est que je doute qu'il y ait une solution sans "insert massif", vu que comme tu le dis il faut que chaque réception de message soit gérée indépendamment, son flag vu/non vu, la corbeille si tu la gères, etc.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-12-2004 à 23:11:15    

Sielfried a écrit :

Perso en tout cas j'ai un système de messagerie sur mon site et je fais comme ça (car effectivement j'ai aussi les notions de lu/non lu etc). Cela dit j'ai assez peu de membres.
 
Ce qui est sûr c'est que je doute qu'il y ait une solution sans "insert massif", vu que comme tu le dis il faut que chaque réception de message soit gérée indépendamment, son flag vu/non vu, la corbeille si tu la gères, etc.


oui justement...
Mais bon ça me rassure que tu utilises la même solution que moi, j'avais peur qu'on me traite de malade de faire un INSERT dans une boucle  :wahoo:

Reply

Marsh Posté le 01-12-2004 à 23:17:28    

scarf3ss3 a écrit :

oui justement...
Mais bon ça me rassure que tu utilises la même solution que moi, j'avais peur qu'on me traite de malade de faire un INSERT dans une boucle  :wahoo:


 
Vi enfin je fais qu'un seul INSERT au final (cf mon premier post), dans le doute. :)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-12-2004 à 23:19:02    

Sielfried a écrit :

Vi enfin je fais qu'un seul INSERT au final (cf mon premier post), dans le doute. :)


D'ailleurs à ce propos, j'ai compris sans comprendre. Je ne savais pas qu'on pouvait insérer plusieurs enregistrement d'un seul coup !
comment ça se présente ???

Reply

Marsh Posté le 01-12-2004 à 23:26:56    

insert into table (champ1, champ2, ..., champN)
values
(val1, val2, ... valN),  
(val21, val22,... val2N),
...
(valN1, valN2,... valNN);


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-12-2004 à 23:42:46    

Sielfried a écrit :

insert into table (champ1, champ2, ..., champN)
values
(val1, val2, ... valN),  
(val21, val22,... val2N),
...
(valN1, valN2,... valNN);


 :jap:  
Merci

Reply

Marsh Posté le 01-12-2004 à 23:42:46   

Reply

Marsh Posté le 02-12-2004 à 00:05:23    

Un seul Insert a plusieurs enregistrements sinon ton serveur SQL va faire la gueule...
 
La boucle ne servant qu'a concatener le texte...


Message édité par Manaloup le 02-12-2004 à 00:05:52
Reply

Marsh Posté le 02-12-2004 à 00:28:41    

Manaloup a écrit :

Un seul Insert a plusieurs enregistrements sinon ton serveur SQL va faire la gueule...
 
La boucle ne servant qu'a concatener le texte...


ok merci  :)

Reply

Sujets relatifs:

Leave a Replay

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