besion aide optimisation php mysql

besion aide optimisation php mysql - PHP - Programmation

Marsh Posté le 23-10-2007 à 13:27:49    

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
Reply

Marsh Posté le 23-10-2007 à 13:27:49   

Reply

Marsh Posté le 23-10-2007 à 13:36:37    

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

Reply

Marsh Posté le 23-10-2007 à 13:45:13    

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" ?

Reply

Marsh Posté le 23-10-2007 à 13:46:24    

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
Reply

Marsh Posté le 23-10-2007 à 13:48:51    

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

Reply

Marsh Posté le 23-10-2007 à 13:57:34    

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

Reply

Marsh Posté le 23-10-2007 à 15:26:27    

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

Reply

Sujets relatifs:

Leave a Replay

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