Simplifier une requête

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Simplifier une requête

Re: Simplifier une requête

par or 1 » 05 oct. 2015, 11:41

vérifier que c'est bien un nombre, oui
mais, verifier que l'id existe, ce sera fait par la requete sql alors cela me semble superflu.

Simplifier une requête

par LittleFairy » 05 oct. 2015, 11:12

Bonjour à tous,

J'ai créé une requête pour afficher des annonces selon un tri, elle a l'air de fonctionner mais je la trouve compliquée et potentiellement lourde.
Pouvez-vous m'aider à la simplifier ?

Les champs : le champ région_annonce, le champ rubrique_annonce.
Attention, dans la base, ces champs se présentent ainsi : rubrique_annonce : 1, 5, 8, 9, 11, 12 etc. et il faudra vérifier que le choix de tri ( "5" par exemple) est présent dans rubrique_annonce. Pareil pour les régions.
Je récupère les variables $_POST['tri'] à 1 lorsque le formulaire de recherche a été utilisé,
les variables $_POST['tri_region'] et $_POST['tri_rubrique'] qui sont les identifiants des régions et rubriques.

Voici ce qui fonctionne actuellement :
if (isset($_POST['tri'])){
	 $rech="1 ";
		if ($_POST['tri_region']!=""){		
			$req_region_tri = $client->query("SELECT id_annonce, region_annonce FROM annonce");
			$i="0";
			while ($row_req_region_tri = $req_region_tri->fetch_assoc()){
			$array = explode(',', $row_req_region_tri['region_annonce']);
			$test=(in_array($_POST['tri_region'], $array));
					if($test==1){
// si on trouve la région dans la recherche, on cherche si la rubrique est aussi dedans
						if ($_POST['tri_rubrique']!=""){	
			$req_rubrique_tri = $client->query("SELECT id_annonce, rubrique_annonce FROM annonce WHERE id_annonce=$row_req_region_tri[id_annonce]");
			//$i="0";
			while ($row_req_rubrique_tri = $req_rubrique_tri->fetch_assoc()){
			$array = explode(',', $row_req_rubrique_tri['rubrique_annonce']);
$test=(in_array($_POST['tri_rubrique'], $array));
					if($test==1){
								if ($i=="0"){
							$rech.=" AND ";
								} else {
							$rech.=" OR ";	
								}
						$rech.="id_annonce=$row_req_rubrique_tri[id_annonce]";
						$i++;
					}
			}}
			
					}
			}
		}
		 else { // s'il n'y a pas de valeur à région :
 if ($_POST['tri_rubrique']!=""){	
			$req_rubrique_tri = $client->query("SELECT id_annonce, rubrique_annonce FROM annonce");
			$i="0";
			while ($row_req_rubrique_tri = $req_rubrique_tri->fetch_assoc()){
			$array = explode(',', $row_req_rubrique_tri['rubrique_annonce']);
$test=(in_array($_POST['tri_rubrique'], $array));
					if($test==1){
								if ($i=="0"){
							$rech.=" AND ";
								} else {
							$rech.=" OR ";	
								}
						$rech.="id_annonce=$row_req_rubrique_tri[id_annonce]";
						$i++;
					}
			}}
		}
		//echo $rech;
$req_annonces = $client->query("SELECT * FROM annonce WHERE $rech LIMIT $start_from, $per_page");
}
Y'aurait mieux, n'est-ce pas ?

Merci,

LF