Page 1 sur 2
Requete mysql qui affiche les résultats compris entre deux
Posté : 30 sept. 2005, 15:46
par pingoo
Bonjour, mon probléme est que je n'arrive pas à créer une requete qui m'affichera le résultat compris entre deux variables :
exemple je veux afficher les résultats compris entre 100 et 500 inclus.
En même temps j'aimerais pouvoir laisser libre l'un ou l'autre du style à partir de 100 à l'infini. Même chose pour tous jusqu'à 100..
Voici ma requête :
if ($prix_mini != "tous" && $prix_maxi != "tous") {
$select .= "BETWEEN '". $prix_mini ."' AND '". $prix_maxi ."' ";
}
Merci pour votre aide
Posté : 30 sept. 2005, 15:55
par mere-teresa
Ajoute un OR
OR gnagna BETWEEN gna AND gniu
Posté : 30 sept. 2005, 15:56
par Cyrano
Avec quel SGBD ? Si c'est MySQL, je crois bien que BETWEEN n'est pas fonctionnel, mais tu peux ruser:
Mais je ne suis sûr de rien pour BETWEEN avec MySQL, je n'ai pas trouvé dans la doc.
Posté : 30 sept. 2005, 16:11
par pjl
Si, si, ca marche.
Un exemple de requete :
$requete = "SELECT texte_news
FROM jeux_news
WHERE type_lang = '" . lng . "' AND now() BETWEEN date_debut AND date_fin
ORDER BY RAND()
LIMIT 0,1";
Posté : 30 sept. 2005, 16:12
par pingoo
Cela ne fonctionne pas j'utilise mysql :
if ($prix_mini != "tous" || $prix_maxi != "tous") {
$select .= "AND prix >= '". $prix_mini ."' AND prix <= '". $prix_maxi ."' ";
}
La requête n'est pas prit en compte
Merci pour votre aide
Posté : 30 sept. 2005, 17:32
par pascaltje
enleve une paire d'apostrophes, les prix sont des nombres et ta requete en fait des chaines de caracteres.
A+
Pascal
Posté : 30 sept. 2005, 17:48
par pingoo
Toujours rien la requête n'est toujours pas pris en compte...
Voici toutes la requête :
$select = "SELECT cat, titre, pseudom, ville, nomDestination1, nomDestination2, nomDestination3, departement, prix, id, DATE_FORMAT(date, '%d.%m.%y') date, SUBSTRING(description,1,200) AS description FROM fk_dvd_vhs_cinema ";
switch ($parution) {
case "toutes":
$select .= "where date ";break;
case "aujourdhui":
$select .= "where date > '". $date1 ."' ";break;
case "1semaine":
$select .= "where date > '". $date2 ."' ";break;
case "2semaines":
$select .= "where date > '". $date3 ."' ";break;
case "3semaines":
$select .= "where date > '". $date4 ."' ";break;
case "1mois":
$select .= "where date > '". $date5 ."' ";break;
}
if ($mots_cle != "") {
$select .= "AND (cat LIKE '%". $mots_cle ."%' OR titre LIKE '%". $mots_cle ."%' OR description LIKE '%". $mots_cle ."%') ";
}
if ($categorie != "Toutes") {
$select .= "AND cat LIKE '". $categorie ."%' ";
}
if ($departement != "Toutes") {
$select .= "AND departement LIKE '". $departement ."%' ";
}
if ($ville != "") {
$select .= "AND ville LIKE '". $ville ."%' ";
}
if ($prix_mini != "tous" || $prix_maxi != "tous") {
$select .= "AND prix >= ". $prix_mini ." AND prix <= ". $prix_maxi ." ";
}
if ($categorie != "Toutes" || $departement != "Toutes" || $prix_mini != "tous" || $prix_maxi != "tous" || $parution != "toutes" || $mots_cle != "") {
$select .= " $tri_date ";
}
if ($categorie == "Toutes" && $departement == "Toutes" && $prix_mini == "tous" && $prix_maxi == "tous" && $parution == "toutes" && $mots_cle == "") {
$select .= " $tri_date ";
}
Désolé pour le désordre
Posté : 30 sept. 2005, 18:52
par Cyrano
C'est effectivement un peut le fouillis; Il me manque un élément :
Où est définie $tridate ?
Posté : 30 sept. 2005, 19:23
par Invité
Pardon :
$tri_date= "ORDER BY 'id' DESC "; //tri par date
$select = "SELECT cat, titre, pseudom, ville, nomDestination1, nomDestination2, nomDestination3, departement, prix, id, DATE_FORMAT(date, '%d.%m.%y') date, SUBSTRING(description,1,200) AS description FROM fk_dvd_vhs_cinema ";
switch ($parution) {
case "toutes":
$select .= "where date ";break;
case "aujourdhui":
$select .= "where date > '". $date1 ."' ";break;
case "1semaine":
$select .= "where date > '". $date2 ."' ";break;
case "2semaines":
$select .= "where date > '". $date3 ."' ";break;
case "3semaines":
$select .= "where date > '". $date4 ."' ";break;
case "1mois":
$select .= "where date > '". $date5 ."' ";break;
}
if ($mots_cle != "") {
$select .= "AND (cat LIKE '%". $mots_cle ."%' OR titre LIKE '%". $mots_cle ."%' OR description LIKE '%". $mots_cle ."%') ";
}
if ($categorie != "Toutes") {
$select .= "AND cat LIKE '". $categorie ."%' ";
}
if ($departement != "Toutes") {
$select .= "AND departement LIKE '". $departement ."%' ";
}
if ($ville != "") {
$select .= "AND ville LIKE '". $ville ."%' ";
}
if ($prix_mini != "tous" || $prix_maxi != "tous") {
$select .= "AND prix >= ". $prix_mini ." AND prix <= ". $prix_maxi ." ";
}
if ($categorie != "Toutes" || $departement != "Toutes" || $prix_mini != "tous" || $prix_maxi != "tous" || $parution != "toutes" || $mots_cle != "") {
$select .= " $tri_date ";
}
if ($categorie == "Toutes" && $departement == "Toutes" && $prix_mini == "tous" && $prix_maxi == "tous" && $parution == "toutes" && $mots_cle == "") {
$select .= " $tri_date ";
}
Posté : 30 sept. 2005, 19:26
par Cyrano
Ok, vu, donne moi un moment, je sens que ça va dégraisser, je reviens avec une solution

Posté : 30 sept. 2005, 19:33
par Cyrano
Bon, je voudrais savoir encore deux choses:
- Quel type de valeurs sont enregistrées dans "categorie" : Si ce sont toujoursles mêmes mots, alors LIKE n'est pas approprié et on devrait logiquement utiliser le = ?
- Explique-moi dans tes mots de la manière la plus claire que tu peux le deux dernirs if() de ce code: le second à la rigueur peut passer, mais j'ai plus de mal à comprendre ce que tu as voulu faire avec le premier puisque la condition est vérifiée si AU MOINS UN des cas est vrai, mais dans ce cas, ça a déjà été traité dans le switch et dans les autres if().
Posté : 30 sept. 2005, 21:52
par pingoo
Dans catégorie sont enregistrés les valeurs provenant d'un formulaire d'une liste déroulante.
Et c'est vrai je ne sais pas pourquoi j'avais ajouté cette partie
Code : Tout sélectionner
if ($categorie != "Toutes" || $departement != "Toutes" || $prix_mini != "tous" || $prix_maxi != "tous" || $parution != "toutes" || $mots_cle != "") {
$select .= " $tri_date ";
}
elle est inutile.
Je n'ais toujours pas trouvé de solution au niveau du prix mini et maxi doit bien y avoir une solution efficace?
Merci pour ton aide

Posté : 30 sept. 2005, 23:35
par Cyrano
Bon, on va donc partir d'un script de base et on affinera si le résultat n'est pas bon :
<?php
$tri_date= "ORDER BY 'id' DESC "; //tri par date
$select = "SELECT cat, titre, pseudom, ville, nomDestination1, nomDestination2, nomDestination3, departement, prix, id, DATE_FORMAT(date, '%d.%m.%y') date, SUBSTRING(description,1,200) AS description ".
"FROM fk_dvd_vhs_cinema ";
$select .= "WHERE date > ";
switch ($parution)
{
case "aujourdhui":
$select .= "'". $date1 ."' ";
break;
case "1semaine":
$select .= "'". $date2 ."' ";
break;
case "2semaines":
$select .= "'". $date3 ."' ";
break;
case "3semaines":
$select .= "'". $date4 ."' ";
break;
case "1mois":
$select .= "'". $date5 ."' ";
break;
}
if ($mots_cle != "")
{
$select .= "AND (cat LIKE '%". $mots_cle ."%' OR titre LIKE '%". $mots_cle ."%' OR description LIKE '%". $mots_cle ."%') ";
}
if ($categorie != "Toutes")
{
$select .= "AND cat LIKE '". $categorie ."%' ";
}
if ($departement != "Toutes")
{
$select .= "AND departement LIKE '". $departement ."%' ";
}
if ($ville != "")
{
$select .= "AND ville LIKE '". $ville ."%' ";
}
if ($prix_mini != "tous" || $prix_maxi != "tous")
{
$select .= "AND prix >= ". $prix_mini ." AND prix <= ". $prix_maxi ." ";
}
if($categorie == "Toutes"
&& $departement == "Toutes"
&& $prix_mini == "tous"
&& $prix_maxi == "tous"
&& $parution == "toutes"
&& $mots_cle == "")
{
$select .= " $tri_date ";
}
?>
Posté : 01 oct. 2005, 00:05
par pingoo
Je ne vois pas trop quoi modifier?
Posté : 01 oct. 2005, 00:13
par Cyrano
Tu obtiens quoi avec ça ? Faudrait commencer par tester en mettant des prix mini et maxi dans des fourchettes où tu sais que tu as des lignes dans la base (ou pas d'ailleurs)
Là, tu as une phase de test à faire pour vérifier autant de possibilités que possibles. Si une ne fonctionne pas, isole-là et note les détails puis continue.
En principe avec ce genre de choses, on prévoit un jeu d'essai et un jeu de tests pour vérifier aussi large que possible. Une fois que ce sera en ligne, il sera trop tard pour tester, c'est maintenant qu'il faut que ça fonctionne.