Requete mysql qui affiche les résultats compris entre deux

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requete mysql qui affiche les résultats compris entre deux

par pingoo » 01 oct. 2005, 02:19

OUF j'ai trouvé la solution :D
Comme le prix n'est pas une chaine de caractère la valeur doit etre totalement nu :

Code : Tout sélectionner

if ($prix_mini != "tous" || $prix_maxi != "tous") { $select .= "AND prix >= ". $prix_mini ." AND prix <= ". $prix_maxi ." "; }
Merci beaucoup pour votre aide

par pingoo » 01 oct. 2005, 01:47

J'ai remplacé LIKE par un = mais la condition ne fonctionne plus

par Cyrano » 01 oct. 2005, 00:59

Ok, essaye celle-là (la même modifiée:

Code : Tout sélectionner

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 WHERE date > '2005-09-30' AND ( cat LIKE '%mot2%' OR titre LIKE '%mot2%' OR description LIKE '%mot2%' ) AND cat = 'Action et Aventure' AND departement = 'Doubs (25)' AND ville = 'ville2' AND prix >= '40000' AND prix <= '40000' ORDER BY 'id' DESC LIMIT 0 , 30
Si tu as le résultat attendu, tu observeras bien ce que j'ai changé pour modifier le code de génération en conséquence.

par pingoo » 01 oct. 2005, 00:55

La requête SQL a été exécutée avec succès. Je ne vois pas ou j'ai fais une erreur y doit y avoir un problème qui n'a rien à voir avec la requête

par Cyrano » 01 oct. 2005, 00:52

C'est beaucoup mieux : et là, tu as un résultat dans phpMyAdmin ou un message d'erreur ?

par pingoo » 01 oct. 2005, 00:46

Désolé je me suis rendu compte de mon erreur et le résultat et positif pas d'erreur.

Code : Tout sélectionner

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 WHERE date > '2005-09-30' AND ( cat LIKE '%mot2%' OR titre LIKE '%mot2%' OR description LIKE '%mot2%' ) AND cat LIKE 'Action et Aventure%' AND departement LIKE 'Doubs (25)%' AND ville LIKE 'ville2%' AND prix >= '40000' AND prix <= '40000' ORDER BY 'id' DESC LIMIT 0 , 30

par Cyrano » 01 oct. 2005, 00:44

C'est sur que si tu essayes d'exécuter une requête avec du PHP directement dedans, ça va planter.

Génère une requête via ton formulaire, mais rajoute un echo($select) après le script pour faire afficher la requête: copie-là et essaye celle-ci dans phpMyAdmin.

par pingoo » 01 oct. 2005, 00:41

J'ais l'erreur suivante :

Code : Tout sélectionner

MySQL a répondu: #1064 - Erreur de syntaxe près de 'switch ($parution) { case "toutes": $sql1 .= where date' à la ligne 1

par Cyrano » 01 oct. 2005, 00:23

As-tu testé ta requête directement dans phpMyAdmin ?

par pingoo » 01 oct. 2005, 00:16

Les tests sont fait et ne donne rien la requete n'est pas prise en compte ou et fausse alore qu'il y a un résultat correspondant dans la base

par Cyrano » 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.

par pingoo » 01 oct. 2005, 00:05

Je ne vois pas trop quoi modifier?

par Cyrano » 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 ";
}
?>

par pingoo » 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

par Cyrano » 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().