Bonjour
J'ai créé un formulaire de recherche :
Ce formulaire renvoi vers une page "résultat de la recherche" et dans cette page je dois afficher la liste des maisons correspondante aux critère de ma recherche.
Pour cela je me sert de la table wp_postmata (champs : meta_id, post_id, meta_key, meta_value).
Seulement :
- l'input "localisation" correspond au champ meta_key = cpt_codePostal OU meta_key = cpt_ville
- le select "budget" correspond au champ meta_key = cpt_prixVente
- le select "surface" correspond au champ meta_key = cpt_surfaceCadastrale
Et j'ai fait une requête comme suit :
Mais du coup le résultat de ma requête est vide vu qu'on ne peut pas (tel quel en tt cas) faire une requête sur une seule table mais vérifier plusieurs champs.
Comment parvenir au résultat ?
En espérant avoir été assez claire ^^
Précision, je suis sous WordPress 3.9.1.
Merci d'avance
J'ai créé un formulaire de recherche :
<form class="inte-rech" method="post" action="<?php echo get_permalink(500); ?>">
<input type="text" name="localisation" id="localisation" value="" placeholder="Ville, code postal" />
<select name="budget" id="budget" class="custom-select">
<option value="0">Indiférent</option>
<option value="10000">Moins de 15 000 €</option>
<option value="15000">De 15 000 à 20 000 €</option>
<option value="20000">De 20 000 à 25 000 €</option>
<option value="25000">De 25 000 à 30 000 €</option>
<option value="30000">De 30 000 à 35 000 €</option>
<option value="35000">De 35 000 à 40 000 €</option>
<option value="40000">De 40 000 à 45 000 €</option>
<option value="45000">45 000 € et plus</option>
</select>
<select name="surface" id="surface" class="custom-select">
<option value="0">Indiférent</option>
<option value="200">Moins de 300 m²</option>
<option value="300">De 300 à 600 m²</option>
<option value="600">De 600 à 1000 m²</option>
<option value="1000">Plus de 1000 m²</option>
</select>
</form><!-- .inte-rech -->
Ce formulaire renvoi vers une page "résultat de la recherche" et dans cette page je dois afficher la liste des maisons correspondante aux critère de ma recherche.
Pour cela je me sert de la table wp_postmata (champs : meta_id, post_id, meta_key, meta_value).
Seulement :
- l'input "localisation" correspond au champ meta_key = cpt_codePostal OU meta_key = cpt_ville
- le select "budget" correspond au champ meta_key = cpt_prixVente
- le select "surface" correspond au champ meta_key = cpt_surfaceCadastrale
Et j'ai fait une requête comme suit :
$localisation = $_POST['localisation'];
echo '<strong>Localisation :</strong> '.$localisation.'<br/>';
$rayon = $_POST['rayon'];
echo '<strong>Rayon :</strong> '.$rayon.'<br/>';
$budget = $_POST['budget'];
echo '<strong>Budget :</strong> '.$budget.'<br/>';
$surface = $_POST['surface'];
echo '<strong>Surface :</strong> '.$surface.'<br/>';
if($localisation != ""){ $sql_loc = 'AND pm.meta_key = ("cpt_ville" OR "cpt_codePostal") AND pm.meta_value LIKE "'.$localisation.'" '; }
else{ $sql_loc = ''; }
if($budget != 0){
if($budget == 10000) { $sql_budg = 'AND pm.meta_key = "cpt_prixVente" AND pm.meta_value < 15000 '; } // Moins de 15 000 €
elseif($budget == 15000){ $sql_budg = 'AND pm.meta_key = "cpt_prixVente" AND pm.meta_value BETWEEN 15000 AND 20000 '; } // De 15 000 à 20 000 €
elseif($budget == 20000){ $sql_budg = 'AND pm.meta_key = "cpt_prixVente" AND pm.meta_value BETWEEN 20000 AND 25000 '; } // De 20 000 à 25 000 €
elseif($budget == 25000){ $sql_budg = 'AND pm.meta_key = "cpt_prixVente" AND pm.meta_value BETWEEN 25000 AND 30000 '; } // De 25 000 à 30 000 €
elseif($budget == 30000){ $sql_budg = 'AND pm.meta_key = "cpt_prixVente" AND pm.meta_value BETWEEN 30000 AND 35000 '; } // De 30 000 à 35 000 €
elseif($budget == 35000){ $sql_budg = 'AND pm.meta_key = "cpt_prixVente" AND pm.meta_value BETWEEN 35000 AND 40000 '; } // De 35 000 à 40 000 €
elseif($budget == 40000){ $sql_budg = 'AND pm.meta_key = "cpt_prixVente" AND pm.meta_value BETWEEN 40000 AND 45000 '; } // De 40 000 à 45 000 €
elseif($budget == 45000){ $sql_budg = 'AND pm.meta_key = "cpt_prixVente" AND pm.meta_value > 45000 '; } // 45 000 € et plus
}else{
$sql_budg = '';
}
if($surface != 0){
if($surface == 200) { $sql_surf = 'AND pm.meta_key = "cpt_surfaceCadastrale" AND pm.meta_value < 300 '; } // Moins de 300 m2
elseif($surface == 300) { $sql_surf = 'AND pm.meta_key = "cpt_surfaceCadastrale" AND pm.meta_value BETWEEN 300 AND 600 '; } // De 300 à 600 m2
elseif($surface == 600) { $sql_surf = 'AND pm.meta_key = "cpt_surfaceCadastrale" AND pm.meta_value BETWEEN 600 AND 1000 '; } // De 600 à 1000 m2
elseif($surface == 1000){ $sql_surf = 'AND pm.meta_key = "cpt_surfaceCadastrale" AND pm.meta_value > 1000 '; } // Plus de 1000 m2
}else{
$sql_surf = '';
}
$resultats = $wpdb->get_results('
SELECT pm.meta_id, pm.post_id, pm.meta_key, pm.meta_value
FROM wp_posts p, wp_postmeta pm
WHERE p.ID = pm.post_id
AND p.post_type = "annonces"
'.$sql_loc.'
'.$sql_budg.'
'.$sql_surf.'
GROUP BY pm.post_id
');
foreach($resultats as $resultat){
echo 'meta_id : '.$resultat->meta_id.'<br/>';
echo 'post_id : '.$resultat->post_id.'<br/>';
echo 'meta_key : '.$resultat->meta_key.'<br/>';
echo 'meta_value : '.$resultat->meta_value.'<br/><br/>';
}
Mais du coup le résultat de ma requête est vide vu qu'on ne peut pas (tel quel en tt cas) faire une requête sur une seule table mais vérifier plusieurs champs.
Comment parvenir au résultat ?
En espérant avoir été assez claire ^^
Précision, je suis sous WordPress 3.9.1.
Merci d'avance