8792 sujets

Développement web côté serveur, CMS

Bonjour a tous,

Je viens demander de l'aider pour un moteur de recherche avancé.
Mon problème et au niveau de la tranche de prix je m'explique :
La personne peut faire une recherche entre ex : 100000 & 200000,
Donc je voudrais qu'il me sorte que les résultat compris entre cette tranche de prix.
le souci et que j'ai l’impression qu'il ne prend en compte que le premier chiffre ici 1 et 2 donc il me sort plusieurs résultat.

Voila ma requête

$query = "SELECT * FROM annonce a, typebien t WHERE a.typeBien='$_type' AND a.typeBien=t.idTypeBien ";
if(!empty($_pieces) and $_pieces <= 4)$query.=" AND a.nombrePiece='$_pieces'";
elseif(!empty($_pieces) and $_pieces = 5)$query.=" AND a.nombrePiece>='$_pieces'";
if(!empty($_ville))$query.=" AND a.villeBien LIKE '%$_ville%'";
if(!empty($_vendreOuLouer))$query.=" AND a.vendreOuLouer ='$_vendreOuLouer'";
if(!empty($_dept))$query.=" AND a.codePostalBien='$_dept'";
if(!empty($_time))$query.=" AND a.timestamp >= '$soustraction'";
if(!empty($_prixMin))$query.=" AND a.prix>='$_prixMin'";
if(!empty($_prixMax))$query.=" AND a.prix<='$_prixMax'";
$query.=" ORDER BY idAnnonce DESC";

quelqu'un pourrait m'aider ?

merci d'avance !
Modifié par Viva (29 Dec 2006 - 10:28)
pourais tu mettre ton code dans les balises [code] s'il te plait?

et sinon pour que ce soit plus simple pour t'aider pourais tu faire un echo sur ta requête qui ne marche pas avec un ce qui t'affiche et ce que tu voulais avoir...

ça serait plus simple comme ça pour t'aider... merci Smiley smile
Le Code :


$query = "SELECT * FROM annonce a, typebien t WHERE a.typeBien='$_type' AND a.typeBien=t.idTypeBien ";
if(!empty($_pieces) and $_pieces <= 4)$query.=" AND a.nombrePiece='$_pieces'";
elseif(!empty($_pieces) and $_pieces = 5)$query.=" AND a.nombrePiece>='$_pieces'";
if(!empty($_ville))$query.=" AND a.villeBien LIKE '%$_ville%'";
if(!empty($_vendreOuLouer))$query.=" AND a.vendreOuLouer ='$_vendreOuLouer'";
if(!empty($_dept))$query.=" AND a.codePostalBien='$_dept'";
if(!empty($_time))$query.=" AND a.timestamp >= '$soustraction'";
if(!empty($_prixMin))$query.=" AND a.prix>='$_prixMin'";
if(!empty($_prixMax))$query.=" AND a.prix<='$_prixMax'";
$query.=" ORDER BY idAnnonce DESC";


donc je fait une recherche comme prix Min : 100000 et prixMax : 200000
donc la requete me donne ca :

Voila la requete :

SELECT * FROM annonce a, typebien t WHERE a.typeBien='1' AND a.typeBien=t.idTypeBien AND a.vendreOuLouer ='1' AND a.prix>= '100000' AND a.prix<= '200000' ORDER BY idAnnonce DESC


le probleme c 'est quil ne chercher pas entre les PrixMin et PrixMax jai fait plusieur teste si jai par ex un annonce don le prix est 300 euro si je tape entre 100 et 300 il me la trouve mais si je mais entre 1 et 3 il me la trouve quand meme on dirait quil ne prend que le 1 chiffre pk ?
Modifié par Viva (26 Dec 2006 - 17:14)
jai deja essayer avec BETWEEN()

voila ce quil me sort quand je fait avec 100000 et 200000


SELECT * FROM annonce a, typebien t WHERE a.typeBien='1' AND a.typeBien=t.idTypeBien AND a.vendreOuLouer ='1' AND a.prix BETWEEN '100000' AND '200000' ORDER BY idAnnonce DESC

Nous avons trouvé 1 résultat pour votre requete . Voici les résultats : 


et si je met 1 et 2


SELECT * FROM annonce a, typebien t WHERE a.typeBien='1' AND a.typeBien=t.idTypeBien AND a.vendreOuLouer ='1' AND a.prix BETWEEN '1' AND '2' ORDER BY idAnnonce DESC

Nous avons trouvé 1 résultat pour votre requete . Voici les résultats : 


le resultat et tjr le meme il prend bien en compte que le premiere chiffre pk ?
Hello,

vérifie bien le type de donnée de ton champ prix... il faut que sa soit un type INT... si c'est un type texte ou autre cela peut etre une explication de ton pb de comparaison.
super kemar ca marche nikel tu es mon sauveur lol !!

mais je voudrais que tu m'explique si c'est pas trop te demander INT change quoi ?
INT signifie que MySQL enregistrera que des données numériques entier (pas de lettres ou autre caractère).

Donc si ton champ était TEXT ou VARCHAR par exemple, MySQL ne sais pas prendre des valeurs entre (BETWEEN) 2 champs de type textuel, c'est pour ça qu'on utilise le type INT (par exemple car il en existe bien d'autres).