Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
731 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  besion aide optimisation php mysql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

besion aide optimisation php mysql

n°1629282
zaka47
Posté le 23-10-2007 à 13:27:49  profilanswer
 

salut a tous , voilà j'ai un petit soucis avec le code suivant :
 

Code :
  1. <?
  2. $out.="<th class=column2 style='font-weight:bold'>Action</th></tr></thead>";
  3. $tabech=array();
  4. $tabidt=array();
  5. $nextmonth=date("Y-m-d",mktime(0,0,0,date("m" )+1,date("d" ),date("Y" )));
  6. $today=date("Y-m-d",mktime(0,0,0,date("m" ),date("d" ),date("Y" )));
  7. //REQUETE SUR ID CANDIDATS
  8. $result = db_query("SELECT distinct(c.id),c.nachname,c.vorname,t.status FROM candidats c, todo t, parametres p
  9. WHERE t.deadline>'2007-05-05' and t.candidat=c.ID and c.kategorie =p.id and p.nom like 'statut' and
  10. ((p.id!=995 and p.id!=48 and t.status <>3) or (p.id=995 or p.id=48 and t.status=3))
  11. and t.ext=".$user_ID." ".$wherec." and t.echeance is not null order by t.echeance ASC " )
  12. or db_die();
  13. $i=0;
  14. while($row = db_fetch_row($result)){
  15. $tab_rech=array();
  16. $reqza = db_query("SELECT count(ID),recherche FROM ".DB_PREFIX."todo
  17. WHERE suite like 'sans%' and candidat=".$row[0]." Group BY recherche" )
  18. or db_die();
  19. while($resza=db_fetch_row($reqza)){
  20. if($resza[0]>0 and $resza[1] !="" ) $tab_rech[]=$resza[1];
  21. }
  22. $conpteur=count($tab_rech);
  23. if($conpteur>0){
  24. $req10 = db_query("SELECT t.echeance,t.status,t.id FROM ".DB_PREFIX."todo t, parametres p
  25. WHERE p.valeur = t.remark and
  26. (p.nom like 'action_process%' or p.nom like'action_cv' ) and t.candidat = ".$row[0]." and t.suite not like 'sans suite%' ".$wherec." and t.recherche NOT IN (".implode(",",$tab_rech)." ) ORDER BY t.deadline desc,p.ordre DESC" )
  27. or db_die();
  28. }
  29. else{
  30. $req10 = db_query("SELECT t.echeance,t.status,t.id FROM ".DB_PREFIX."todo t, parametres p
  31. WHERE p.valeur = t.remark and
  32. (p.nom like 'action_process%' or p.nom like'action_cv' ) and t.candidat = ".$row[0]." and t.suite not like 'sans suite%' ".$wherec." ORDER BY t.echeance desc,p.ordre desc,t.deadline DESC" )
  33. or db_die();
  34. }
  35. $res10=db_fetch_row($req10);
  36. if($res10[1]!=3){
  37. $tabec[]=$res10[0];
  38. }
  39. else if ($res10[1]==3){
  40. $req00 = db_query("SELECT deadline FROM ".DB_PREFIX."todo
  41. WHERE id=".$res10[2])
  42. or db_die();
  43. $res00=db_fetch_row($req00);
  44. $tabec[]=$res00[0];
  45. }
  46. $tabidt[]="0-".$row[0]."-".$row[2]." ".$row[1];
  47. }
  48. //REQUETE ID CONTACTS
  49. $result2 = db_query(" SELECT contact,deadline FROM todo WHERE ext = $user_ID and status = '3' and candidat=0 ORDER BY deadline ASC " );
  50. while($row2=db_fetch_row($result2)){
  51. $tabec[]=$row2[1];
  52. $tabidt[]="1-".$row2[0];
  53. }
  54. $ar = array($tabec,$tabidt);
  55. array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1]);
  56. $cpt=count($ar[1]);
  57. $i=0;
  58. $k=0;
  59. for($j=0;$j<$cpt;$j++){
  60. $tab_rech=array();
  61. $var = explode("-", $ar[1][$j]);
  62. //si candidat
  63. if($var[0]=="0" ){
  64. //recherche des recherches où le candidats est ouvert
  65. $reqza = db_query("SELECT count(ID),recherche FROM ".DB_PREFIX."todo
  66. WHERE suite like 'sans%' and candidat=".$var[1]." Group BY recherche" )
  67. or db_die();
  68. while($resza=db_fetch_row($reqza)){
  69. if($resza[0]>0 and $resza[1] !="" ) $tab_rech[]=$resza[1];
  70. }
  71. $conpteur=count($tab_rech);
  72. //si candidat ouvert dans au moins une recherche
  73. if($conpteur>0){
  74. $req1 = db_query("SELECT t.remark, t.origine_cv, t.recherche,t.echeance, t.ID,t.status,t.deadline,t.ext FROM ".DB_PREFIX."todo t, parametres p
  75. WHERE p.valeur = t.remark and
  76. (p.nom like 'action_process%' or p.nom like'action_cv' ) and t.candidat = ".$var[1]." and t.suite not like 'sans suite%' ".$wherec." and t.recherche NOT IN (".implode(",",$tab_rech)." ) ORDER BY t.deadline desc,p.ordre DESC" )
  77. or db_die();
  78. $tmp=0;
  79. $res1=db_fetch_row($req1);
  80. $req10 = db_query("SELECT t.remark,t.origine_cv ,t.echeance,t.ext FROM ".DB_PREFIX."todo t, parametres p
  81. WHERE p.valeur = t.remark and
  82. (p.nom like 'action_process%' or p.nom like'action_cv' ) and t.candidat = ".$var[1]." and t.suite not like 'sans suite%' ".$wherec." and t.recherche NOT IN (".implode(",",$tab_rech)." ) ORDER BY t.echeance desc,p.ordre desc,t.deadline DESC" )
  83. or db_die();
  84. $res10=db_fetch_row($req10);
  85. $req101 = db_query("SELECT t.remark,t.origine_cv ,t.echeance,t.ext FROM ".DB_PREFIX."todo t, parametres p
  86. WHERE p.valeur = t.remark and
  87. (p.nom like 'action_process%' or p.nom like'action_cv' ) and t.candidat = ".$var[1]." and t.suite not like 'sans suite%' ".$wherec." and t.recherche NOT IN (".implode(",",$tab_rech)." ) ORDER BY p.ordre desc,t.deadline DESC" )
  88. or db_die();
  89. $res101=db_fetch_row($req101);
  90. }
  91. //sinon
  92. else{
  93. $req1 = db_query("SELECT t.remark, t.origine_cv, t.recherche,t.echeance, t.ID,t.status,t.deadline,t.ext FROM ".DB_PREFIX."todo t, parametres p
  94. WHERE p.valeur = t.remark and
  95. (p.nom like 'action_process%' or p.nom like'action_cv' ) and t.candidat = ".$var[1]." and t.suite not like 'sans suite%' ".$wherec." ORDER BY t.deadline desc,p.ordre DESC" )
  96. or db_die();
  97. $tmp=0;
  98. $res1=db_fetch_row($req1);
  99. $req10 = db_query("SELECT t.remark,t.origine_cv,t.echeance,t.ext FROM ".DB_PREFIX."todo t, parametres p
  100. WHERE p.valeur = t.remark and
  101. (p.nom like 'action_process%' or p.nom like 'action_cv' ) and t.candidat = ".$var[1]." and t.suite not like 'sans suite%' ".$wherec." ORDER BY t.echeance desc,p.ordre desc,t.deadline DESC" )
  102. or db_die();
  103. $res10=db_fetch_row($req10);
  104. $req101 = db_query("SELECT t.remark,t.origine_cv ,t.echeance,t.ext,t.von FROM ".DB_PREFIX."todo t, parametres p
  105. WHERE p.valeur = t.remark and
  106. (p.nom like 'action_process%' or p.nom like'action_cv' ) and t.candidat = ".$var[1]." and t.suite not like 'sans suite%' ".$wherec." ORDER BY p.ordre desc,t.deadline DESC" )
  107. or db_die();
  108. $res101=db_fetch_row($req101);
  109. }
  110. if($res1[0] !='' and $ $res1[0] != 'CACO' and $tmp != $res10[2] and $res101[3]==$user_ID and ($res10[2]<$nextmonth) and ($res1[6]<$nextmonth)){
  111. //requete pour le projet auquel le candidat est affecté
  112. $req3 = db_query("SELECT remark,project,contact,firma,ID,progress FROM ".DB_PREFIX."recherche
  113. WHERE ID = ".$res1[2])
  114. or db_die();
  115. $res3 = db_fetch_row($req3);
  116. $tmp=$res1[2];
  117. if(!ereg("N".$res3[4],$res2[3]) and $res3[3]!='' and $res3[5]==1){
  118. //requete pour la recherche auquel le candidat est affecté
  119. $req4 = db_query("SELECT firma FROM ".DB_PREFIX."contacts
  120. WHERE ID = ".$res3[3])
  121. or db_die();
  122. $res4 = db_fetch_row($req4);
  123. //.....code d'affichages des candidats
  124. }
  125. //si contact
  126. elseif($var[0]=="1" and !$recherche){
  127. $req1 = db_query("SELECT t.remark, t.origine_cv, t.recherche,t.echeance, t.ID,t.status,t.deadline,t.ext FROM ".DB_PREFIX."todo t
  128. WHERE t.contact = ".$var[1]." ".$wherec." ORDER BY t.deadline desc" )
  129. or db_die();
  130. $tmp=0;
  131. $res1=db_fetch_row($req1);
  132. if($res1[7]==$user_ID and ($res1[6]<$nextmonth)){
  133. $req2 = db_query("SELECT vorname, nachname,firma FROM ".DB_PREFIX."contacts
  134. WHERE ID = ".$var[1])
  135. or db_die();
  136. $res2 = db_fetch_row($req2);
  137. $firme=$res2[2];
  138. $req3 = db_query("SELECT ID FROM ".DB_PREFIX."contacts
  139. WHERE firma like '$firme' and div1 like 'e'" )
  140. or db_die();
  141. $res3 = db_fetch_row($req3);
  142. //...code d'affichage des contacts
  143. }
  144. }
  145. }
  146. ?>


 
pour résumé la page met environs une minute à ce charger et il faut réactualiser la page jusqu'a cinq fois pour avoir la totalité des données affichés
si vous avez des suggestion je suis preneur.
Merci d'avance à tous


Message édité par zaka47 le 23-10-2007 à 13:49:05
mood
Publicité
Posté le 23-10-2007 à 13:27:49  profilanswer
 

n°1629291
flo850
moi je
Posté le 23-10-2007 à 13:36:37  profilanswer
 

commence par eregarder le temps d'execution des requetes ( avec un debuguer , ou plus simplement avec time )  
 
 
mais sinon, en vitesse :  
dans le premier cas , tu fais un COUNT* pour chacune des lignes de ta base de donnees, c'est un peu bourrin  
j'adore les commentaire du genre //sinon  
tu devrai mettre ton code entre des balkse code au lieu de quote

n°1629300
zaka47
Posté le 23-10-2007 à 13:45:13  profilanswer
 

salut,
ce n'est pas les requetes en elle meme qui sont longue , c'est le fait de faire une boucle for sur des requetes qui est assez lourd en faite (on peut boucler jusqu'a 100 fois) .
 
ensuite le count me sert a verifier a combien de recherches differentes un candidat est il associe (je ne vois pas comment faire autrement dans mon cas)
 
et je voulais savoir ce que tu entends par :
"tu devrai mettre ton code entre des balkse code au lieu de quote" ?

n°1629303
flo850
moi je
Posté le 23-10-2007 à 13:46:24  profilanswer
 

clic sur le bouton http://forum-images.hardware.fr/themes_static/images/silk/viewbbcode.gif au dessus de mon post pour voir les balises que j'ai mise autour de mon code

 
Code :
  1. if($monCode est bien presente)
  2.    $nbReponse++;


Message édité par flo850 le 23-10-2007 à 13:46:43
n°1629307
flo850
moi je
Posté le 23-10-2007 à 13:48:51  profilanswer
 

est ce que tu as mis des index dans tes tables ?
 
 
tu ne peux pas transformer  
SELECT distinct(c.id),c.nachname,c.vorname,t.status FROM candidats c, todo t, parametres p
WHERE
 
en  
SELECT c.id,c.nachname,c.vorname,t.status,COUNT(DISTINCT recherche.id)
 FROM candidats c, todo t, parametres p,recherche
WHERE GROUP BY c.id

n°1629316
zaka47
Posté le 23-10-2007 à 13:57:34  profilanswer
 

heu pas trop en faite c encore plus long car je v taper dans une table en plus(une tres grosse table)

n°1629369
zaka47
Posté le 23-10-2007 à 15:26:27  profilanswer
 

ben j'ai trouvé des petits tuto sympas
www.vulgarisation-informatique.com...
et
www.estvideo.com...
 
j'ai donc remplacé mes for par des while, les doucles cotes par des simples et revue vite fait mes requetes (enlevé deux ou trois champs qui ne servaient à rien)
et au final rien qu'avec ca j'ai gagné environs 30sed dans le meilleurs des cas.
mais bon comme on peut le voir le code fait assez peur en lui même et je cherche toujours des suggestions d'optimisation


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  besion aide optimisation php mysql

 

Sujets relatifs
caractères spéciaux - recherche php mysqlNuage de tag en php/mysql
[SQL] Optimisation d'une réquète récursiveRequête MySQL fausse ????
[php] Besoin d'aide fonctions vers classesAide en VB script svp
Perte de focus clavier inexpliqué, aide bienvenue !Aide programme Jeu : Devinez le bon chiffre
[PHP] Importer un fichier XML dans base MYSQLLocalisation des "OUTFILE" générés par MySQL chez Free
Plus de sujets relatifs à : besion aide optimisation php mysql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR