Forum Clubic

Besoins aide php mysql

salut a tous je repost mon code car le précédent été trop volumineux et contanait des info inutiles
donc je reposte mon code “allégé”
voilà j’ai un petit soucis avec le code suivant :

<?

//zk modif bouton en href pour ie 17/07/2007
$out.="<th class=column2 style='font-weight:bold'>Action</th></tr></thead>";
$tabech=array();
$tabidt=array();
$nextmonth=date("Y-m-d",mktime(0,0,0,date("m")+1,date("d"),date("Y")));
$today=date("Y-m-d",mktime(0,0,0,date("m"),date("d"),date("Y")));


//REQUETE SUR ID CANDIDATS
$result = db_query("SELECT distinct(c.id),c.nachname,c.vorname,t.status FROM candidats c, todo t, parametres p
WHERE t.deadline>'2007-05-05' and t.candidat=c.ID and c.kategorie =p.id and p.nom like 'statut' and
((p.id!=995 and p.id!=48 and t.status <>3) or (p.id=995 or p.id=48 and t.status=3))
and t.ext=".$user_ID." ".$wherec." and t.echeance is not null order by t.echeance ASC ")
or db_die();

$i=0;

while($row = db_fetch_row($result)){
	$tab_rech=array();
	$reqza = db_query("SELECT count(ID),recherche FROM ".DB_PREFIX."todo
	WHERE suite like 'sans%' and candidat=".$row[0]." Group BY recherche")
	or db_die();
	while($resza=db_fetch_row($reqza)){
	if($resza[0]>0 and $resza[1] !="") $tab_rech[]=$resza[1];

	}

	$conpteur=count($tab_rech);

	if($conpteur>0){
		$req10 = db_query("SELECT t.echeance,t.status,t.id FROM ".DB_PREFIX."todo t, parametres p
		WHERE p.valeur = t.remark and
		(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")
		or db_die();
	}
	else{
		$req10 = db_query("SELECT t.echeance,t.status,t.id FROM ".DB_PREFIX."todo t, parametres p
		WHERE p.valeur = t.remark and
		(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")
		or db_die();
	}
	$res10=db_fetch_row($req10);
	if($res10[1]!=3){
		$tabec[]=$res10[0];
	}
	else if ($res10[1]==3){
		$req00 = db_query("SELECT deadline FROM ".DB_PREFIX."todo
		WHERE id=".$res10[2])
		or db_die();
		$res00=db_fetch_row($req00);
		$tabec[]=$res00[0];
	}
	$tabidt[]="0-".$row[0]."-".$row[2]." ".$row[1];

}

//REQUETE ID CONTACTS
$result2 = db_query(" SELECT contact,deadline FROM todo WHERE ext = $user_ID and status = '3' and candidat=0 ORDER BY deadline ASC ");
while($row2=db_fetch_row($result2)){
	$tabec[]=$row2[1];
	$tabidt[]="1-".$row2[0];
}
$ar = array($tabec,$tabidt);
array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1]);

$cpt=count($ar[1]);
$i=0;
$k=0;
for($j=0;$j<$cpt;$j++){
	$tab_rech=array();
	$var = explode("-", $ar[1][$j]);

	//si candidat
	if($var[0]=="0"){
	//recherche des recherches où le candidats est ouvert
	$reqza = db_query("SELECT count(ID),recherche FROM ".DB_PREFIX."todo
	WHERE suite like 'sans%' and candidat=".$var[1]." Group BY recherche")
	or db_die();

	while($resza=db_fetch_row($reqza)){
	if($resza[0]>0 and $resza[1] !="") $tab_rech[]=$resza[1];
	}
	$conpteur=count($tab_rech);

	//si candidat ouvert dans au moins une recherche
	if($conpteur>0){
		$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
		WHERE p.valeur = t.remark and
		(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")
		or db_die();
		$tmp=0;
		$res1=db_fetch_row($req1);
		$req10 = db_query("SELECT t.remark,t.origine_cv ,t.echeance,t.ext FROM ".DB_PREFIX."todo t, parametres p
		WHERE p.valeur = t.remark and
		(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")
		or db_die();
		$res10=db_fetch_row($req10);
		$req101 = db_query("SELECT t.remark,t.origine_cv ,t.echeance,t.ext FROM ".DB_PREFIX."todo t, parametres p
		WHERE p.valeur = t.remark and
		(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")
		or db_die();
		$res101=db_fetch_row($req101);
	}
	//sinon
	else{
		$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
		WHERE p.valeur = t.remark and
		(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")
		or db_die();
		$tmp=0;
		$res1=db_fetch_row($req1);

		$req10 = db_query("SELECT t.remark,t.origine_cv,t.echeance,t.ext FROM ".DB_PREFIX."todo t, parametres p
		WHERE p.valeur = t.remark and
		(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")
		or db_die();
		$res10=db_fetch_row($req10);

		$req101 = db_query("SELECT t.remark,t.origine_cv ,t.echeance,t.ext,t.von FROM ".DB_PREFIX."todo t, parametres p
		WHERE p.valeur = t.remark and
		(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")
		or db_die();
		$res101=db_fetch_row($req101);

	}
	if($res1[0] !='' and $ $res1[0] != 'CACO' and $tmp != $res10[2] and $res101[3]==$user_ID and ($res10[2]<$nextmonth) and ($res1[6]<$nextmonth)){

		//requete pour le projet auquel le candidat est affecté
		$req3 = db_query("SELECT remark,project,contact,firma,ID,progress FROM ".DB_PREFIX."recherche
		WHERE ID = ".$res1[2])
		or db_die();
		$res3 = db_fetch_row($req3);

		$tmp=$res1[2];
		if(!ereg("N".$res3[4],$res2[3]) and $res3[3]!='' and $res3[5]==1){

		//requete pour la recherche auquel le candidat est affecté
		$req4 = db_query("SELECT firma FROM ".DB_PREFIX."contacts
		WHERE ID = ".$res3[3])
		or db_die();
		$res4 = db_fetch_row($req4);

		//.....code d'affichages des candidats

	}
	//si contact
	elseif($var[0]=="1" and !$recherche){
		$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
		WHERE t.contact = ".$var[1]." ".$wherec." ORDER BY t.deadline desc")
		or db_die();
		$tmp=0;
		$res1=db_fetch_row($req1);
		if($res1[7]==$user_ID and ($res1[6]<$nextmonth)){
			$req2 = db_query("SELECT vorname, nachname,firma FROM ".DB_PREFIX."contacts
			WHERE ID = ".$var[1])
			or db_die();
			$res2 = db_fetch_row($req2);
			$firme=$res2[2];
			$req3 = db_query("SELECT ID FROM ".DB_PREFIX."contacts
			WHERE firma like '$firme' and div1 like 'e'")
			or db_die();
			$res3 = db_fetch_row($req3);
			//...code d'affichage des contacts
			}
			
	}
	}
	
?>

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
Edité le 23/10/2007 à 13:46

Salut,

Je ferme ton autre sujet qui fait doublon. Je te conseille de mettre ton code entre les balises car là c’est limite illisible.
(Tu peux éditer ton 1er message pour faire des modifications, pas besoin de recréer un sujet à chaque fois)

:jap:

salut,
en faite je savois que l’on pouvais faire ca
alors aupres des autres posteurs je m’en escuse sincerement

Je dois avouer que le code me fait un peu peur. Tu as essayé d’optimiser les requêtes SQL?

je sais c’est assez flippant ^^ mais bon c’est une maniere marseillaise de coder mdr
et ben entendu j’ai deja essayer d’optimiser les requetes sql mais rien n’y fait
c’est pas les requetes qui sont lourdes mais le fait de boucler sur les requetes
donc je pense que c’est le php qui merde mais je vois pas ou

Dans tous les cas, peux tu rendre le titre de ton sujet plus explicite? (autre que “besoin aide”, dans le genre qui explique ton problème, et qui soit pas générique)

Merci :slight_smile:

salut,
ben en faite lorsque j’ai creer mon sujet je ne voyais pas trop ce que je devais mettre alors j’ai choisi un nom assez generique comme tu dis pour avoir le plus d’avis différents possibles


ben j'ai trouvé des petits tuto sympas [www.vulgarisation-informatique.com...](http://www.vulgarisation-informatique.com/optimiser-php.php) et [www.estvideo.com...](http://www.estvideo.com/dew/pages/phpbench/)

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