Requete mysql qui affiche les résultats compris entre deux

Eléphanteau du PHP | 40 Messages

30 sept. 2005, 15:46

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

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

30 sept. 2005, 15:55

Ajoute un OR

OR gnagna BETWEEN gna AND gniu
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Mammouth du PHP | 19672 Messages

30 sept. 2005, 15:56

Avec quel SGBD ? Si c'est MySQL, je crois bien que BETWEEN n'est pas fonctionnel, mais tu peux ruser:

Code : Tout sélectionner

...WHERE champ >= ". $mini ." AND champ <= ". $maxi ."...
Mais je ne suis sûr de rien pour BETWEEN avec MySQL, je n'ai pas trouvé dans la doc.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
pjl
ViPHP | 2119 Messages

30 sept. 2005, 16:11

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";

Eléphanteau du PHP | 40 Messages

30 sept. 2005, 16:12

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

ViPHP
ViPHP | 1024 Messages

30 sept. 2005, 17:32

enleve une paire d'apostrophes, les prix sont des nombres et ta requete en fait des chaines de caracteres.

A+

Pascal

Eléphanteau du PHP | 40 Messages

30 sept. 2005, 17:48

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

Mammouth du PHP | 19672 Messages

30 sept. 2005, 18:52

C'est effectivement un peut le fouillis; Il me manque un élément :
Où est définie $tridate ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

30 sept. 2005, 19:23

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 ";
	}

Mammouth du PHP | 19672 Messages

30 sept. 2005, 19:26

Ok, vu, donne moi un moment, je sens que ça va dégraisser, je reviens avec une solution :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 19672 Messages

30 sept. 2005, 19:33

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().
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

30 sept. 2005, 21:52

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 :D

Mammouth du PHP | 19672 Messages

30 sept. 2005, 23:35

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 ";
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

01 oct. 2005, 00:05

Je ne vois pas trop quoi modifier?

Mammouth du PHP | 19672 Messages

01 oct. 2005, 00:13

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: