8796 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis perdu à 100% dans l'utilisation des conditions if et case. J'ai parcouru le web sans trouver de réponse réelle.Comment utiliser les conditions dans un clause where et quelle est la syntaxe ?

Plutôt que de longs discours voici ce que j'aimerais faire, ce n'est pas du Mysql ni autre chose d'ailleurs mais ça donne une idée de ce que j'aimerais faire :

SELECT * FROM annonce WHERE case1 when $var=='1' then categorie = voiture
when $var=='2' then categorie= moto END

Autre problème :
SELECT nameFROM annonce where IF(categories='$categorie', 1, 0) = 1 AND IF(souscat='$cat', 1, 0) = 1 AND price between '$prixmin' and '$prixmax' ORDER BY date asc $limit_str"

Aucun résultat sauf si je remplace le AND par OR et pourtant les conditions sont remplies

SOS ! Smiley decu
Modifié par zicmania (29 Apr 2011 - 10:57)
Bonjour,
Ce serait gentil de poser tes questions une par une ...
De plus la syntaxe est dans mille réponses (tu dis avoir cherché Smiley decu )
Bonjour Christele

Toutes mes excuses. Donc restons en à la première question.

Oui c'est vrai j'ai cherché, j'ai trouvé des formules diverses et variées mais aucune ne répond à mon problème. La plupart n'ont pas de variables PHP par exemple ou alors les syntaxes diffèrent. Je suis sous Wampserver 2.0

Si tu as une réponse vers laquelle m'aiguiller j'en serait ravi.

Merci
Je veux bien regarder avec toi la premiére question, mais je vois que tu mélanges deux choses

1)
Le PHP et MySql tournent sur le site web (serveur)
il envoie au visiteur un html.

La conséquence de ce premier point est que si des valeurs utilisées pour ta requéte
viennent du visiteur, il faut les récupérer en GET ou POST
(ou dans son cookie ou sa session)

2) lorsque tu fait une requéte SQL tu dois avoir réalisé tes test des valeurs PHP
en php avant le SQL !!

Donc pour

SELECT * FROM annonce WHERE case1 when $var=='1' then categorie = voiture
when $var=='2' then categorie= moto END

Tu dois bien sur avoir
if ( $lecas=="1" )
SELECT * FROM annonce WHERE categorie = 'voiture'
if ( $lecas=="2" )
SELECT * FROM annonce WHERE categorie = 'moto'
Les variables PHP sont récupérées dès le début du script par $_POST

La question était de savoir si à l'intérieur d'une requête SQL il y avait la possibilité d'y mettre des "if" ou des "case" avec autant de possibilités et de facilité qu'en PHP.

Là je n'ai donné qu'un version light de la requête.

Une variable $var peut prendre comme valeur "all, auto, moto"
Une autre $energie peut prendre comme valeur "essence, gasoil, gpl"

En ne prenant que ces deux variables imagine ne nombre de requêtes qu'il faudrait faire pour arriver à un résultat. En tout j'ai 5 variables qui peuvent avoir chacune de3 à 5 valeurs différentes. C'est pourquoi je cherche comment faire pour à l'intérieur d'une clause WHERE des if ou des case afin de simplifier.

Prenons le cas suivant : Si $var = all et $energie = gasoil

SELECT * FROM annonce WHERE if(categorie=$categorie){alors afficher les autos et les motos} AND if(energie=$energie){ alors n'afficher que celles qui roulent au gasoil}

Mais comment faire ? Smiley ohwell
Sorry,

Erreur c'est :

SELECT * FROM annonce WHERE if(categorie=$var){alors afficher les autos et les motos} AND if(energie=$energie){ alors n'afficher que celles qui roulent au gasoil}


Un peu plus de précisions : le champ "categorie" peut avoir auto ou moto comme valeur mais pas d'autres

Donc dans mon post précédent celà donnerait avec $var="all" un truc du style

SELECT * FROM annonce WHERE if(categorie=$var){categorie!=""} AND if(energie=$energie){ alors n'afficher que celles qui roulent au gasoil}

bon, ça peut améliorer ma demande....
Je ne comprends pas ta remarque.

Tu me dis de faire
if ( $lecas=="1" )
SELECT * FROM annonce WHERE categorie = 'voiture'
if ( $lecas=="2" )
SELECT * FROM annonce WHERE categorie = 'moto'

ok mais ce n'est pas le problème. As tu bien lu mes posts précédents ?

La page du formulaire se nomme index.php, les valeurs sont récupérées avec $_POST dans la page annonces.php et ça dès les premières lignes.

Tu as comme variables : $var avec la possibilité de "all" ou "moto" ou "auto"
Ensuite tu as $energie avec la possibilité de "all", "Essence", "Gasoil" ou "GPL"
En me limitant à uniquement ces deux variables si j'applique ce que tu me dis (je l'ai déjà fait) on aurait :

if ( $var=="all" and $energie=="all")
SELECT * FROM annonce WHERE categorie !="" and energie="all"
if ( $var=="all" and $energie=="Essence")
SELECT * FROM annonce WHERE categorie !="" and energie="Essence"
if ( $var=="all" and $energie=="Gasoil")
SELECT * FROM annonce WHERE categorie !="" and energie="Gasoil"
if ( $var=="all" and $energie=="GPL")
SELECT * FROM annonce WHERE categorie !="" and energie="GPL"
etc, etc.

Là je te montre l'exemple avec 2 variables en ne me servant que d'une valeur pour l'une d'elle, j'en ai 5 variables différentes !

Imagine le nombre de if !
Modifié par zicmania (29 Apr 2011 - 11:01)
Ooops ! Je fatigue correction sur deuxième ligne

if ( $var=="all" and $energie=="all")
SELECT * FROM annonce WHERE categorie !="" and energie!=""
if ( $var=="all" and $energie=="Essence")
SELECT * FROM annonce WHERE categorie !="" and energie="Essence"
if ( $var=="all" and $energie=="Gasoil")
SELECT * FROM annonce WHERE categorie !="" and energie="Gasoil"
if ( $var=="all" and $energie=="GPL")
SELECT * FROM annonce WHERE categorie !="" and energie="GPL"
etc, etc.
Modifié par zicmania (29 Apr 2011 - 11:00)
J'ai trouvé la syntaxe !

SELECT name FROM annonce where case when '$a'='z' then categories IS NOT NULL END AND case when'$b'!='' then km='$km' END

Smiley smile
Modifié par zicmania (29 Apr 2011 - 10:59)