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