[SQL] Aide sur un WHERE

Aide sur un WHERE [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 04-04-2007 à 19:25:56    

Bonjour,
 
Voila j'ai un petit souci, je ne vois pas comment m'y prendre...
J'ai une page qui affiche des annonces.
 
je selection les annonces dans ma base via le code suivant  
 

Code :
  1. $annonce = mysql_query("SELECT * FROM mabase WHERE (type_affaire='".$type1."' OR type_affaire='".$type2."') AND (type_affaire='".$type1."' OR type_affaire='".$type2."')
  2. AND (type_bien IN '".$typebien1."','".$typebien2."','".$typebien3."','".$typebien4."','".$typebien5."','".$typebien6."'))


 
 
Tout fonctionne y'a pas de probleme seulement j'aimerai encore rajouter une possibilité avec un affichage par communes...
Si je rajouter encore un AND... je ne pourrais plus affichier la liste total des annonces (toutes les communes quoi) je me trompe?
 
Donc comment m'y prendre pour faire en sorte que la selection par commune ne soit effective que si la requete "commune" existe... (en fait en gros il faudrai un OU... mai ça va faire sauter mes selection d'avant)

Reply

Marsh Posté le 04-04-2007 à 19:25:56   

Reply

Marsh Posté le 04-04-2007 à 21:05:27    

bon on va déblayer le terrain parce que c'est pas très clair :
- ca ressemble à du php, vaut mieux éviter de mélanger code php et sql, ca va froisser des gens qui lisent la catégorie SGBD/SQL, à commercer par moi :o
- ca ressemble à du php qui requête un mysql, donc on va partir sur des requêtes qui fonctionnent sous mysql

 

On en profite pour convertir un peu le code histoire qu'il soit lisible :

Code :
  1. $query = "SELECT * FROM mabase WHERE
  2. (
  3.   type_affaire='$type1'
  4.   OR type_affaire='$type2'
  5. )
  6. AND
  7. (
  8.   type_affaire='$type1'
  9.   OR type_affaire='$type2'
  10. )
  11. AND
  12. (
  13.   type_bien IN
  14.   (
  15.     '$typebien1',
  16.     '$typebien2',
  17.     '$typebien3',
  18.     '$typebien4',
  19.     '$typebien5',
  20.     '$typebien6'
  21.   )
  22. )";
  23. $annonce = mysql_query ($query);
 

Bon allez les remarques :
- inutile de faire tout plein de concaténations quand il n'y a pas de besoin
- éviter de faire un "select *" mais un "select champs1, champs2, ..." car sinon c'est la porte ouverte aux failles de sécurité
- ta 2ème condition ressemble à la 1ère
- qu'appelles tu "par commune" ? l'utilisateur filtre sur les communes, tu ajoutes une condition "AND commune='...'" dans ta requête, il est donc normal qu'il ne voit plus toutes les annonces mais seulement les annonces filtrées par la commune choisie
- on ne fait pas de "select * from mabase" mais un "select * from matable"

 


Message édité par couak le 04-04-2007 à 21:06:31
Reply

Marsh Posté le 04-04-2007 à 22:16:27    

merci de t'intéréssé a mon cas :
- La 2eme c'est pas qu'elle ressemble ... c'est la même lol... j'avais meme pas vu tellement j'étais plongé ds mon code...
- on m'avait déja parlé pour le * , je vai le modifier y'a pas de souci pour ça...
- Concernant le mabase j'ai fait une erreur en postant lol... effectitvement j'aurai du ecrire ma table... me suis trompé
- Ce que j'appelle par commune => la possibilité de filtrer par commune ... mais comme je l'indique je voudrai que ça reste une possiblité... alor comment faire je créer un requete différente si l'utilisateur ne se sert pas du filtre?
 
Je suis débutant donc j'ai pas encore toute la logique :d...

Reply

Marsh Posté le 04-04-2007 à 22:21:50    

en fait ma solution je croi que je l'ai trouver... c'est plus par PHP que je vais m'aider...
En fait il suffit donc que je dise si par exemple $_GET['commune'] existe je définit ma requete avec bla bla WHERE commune='". $_GET['commune']."'
 
Sinon... je redifini ma requete sans le commune...
 
C'est bien ça non je suis pas a Ouest?

Reply

Marsh Posté le 04-04-2007 à 22:24:34    

c'est exactement ça, pour ajouter des filtres choisis par l'utilisateur, c'est à PHP de s'en occuper.

Reply

Marsh Posté le 04-04-2007 à 22:29:10    

donc si j'ai bien compris j'au un truc ds le genre...
 

Code :
  1. if (!empty($_GET['commune'])) {
  2. $requete = ("SELECT (bla, bla , bla) FROM ma_table WHERE transaction... AND commune='".$_GET['commune']."' " )
  3. else {
  4. $requete = ("SELECT (bla, bla , bla) FROM ma_table WHERE transaction... TOUT COURT " )
  5. }

Reply

Marsh Posté le 05-04-2007 à 00:01:52    

tu peux en tartiner un peu moins, car le problème c'est que si tu changes ta requête, tu vas tout te retaper en copier/coller avec les éventuels erreurs et fautes de frappes
Fais plutôt comme ca :

Code :
  1. $requete = SELECT (bla, bla , bla) FROM ma_table WHERE transaction ...";
  2. if ($_GET['commune'])
  3. {
  4.   $requete .= " and commune='".$_GET['commune']."'";
  5. }


L'intéret c'est que tu pourras ajouter des filtres supplémentaires, comme par exemple le nbre de pièces, la superficie, etc.
Exemple :

Code :
  1. $requete = SELECT (bla, bla , bla) FROM ma_table WHERE transaction ...";
  2. if ($_GET['commune'])
  3. {
  4.   $requete .= " and commune='".$_GET['commune']."'";
  5. }
  6. if ($_GET['superficie_min'])
  7. {
  8.   $requete .= " and superficie>=".$_GET['superficie_min'];
  9. }
  10. if ($_GET[...])
  11. {
  12.   $requete .= " and ......";
  13. }


Mais là on sort carrément du cadre SQL, va falloir continuer sur le topic PHP


Message édité par couak le 05-04-2007 à 00:04:52
Reply

Marsh Posté le 05-04-2007 à 09:22:14    

d'accord merci beaucoup je ne connais pas tro cette syntaxe...c'est super juste ce qu'il me fallai !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed