Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2006, 19h46   #1
Membre à l'essai
 
Inscription : novembre 2004
Messages : 144
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 144
Points : 24
Points : 24
Par défaut [SQL] aide pour construire une requête

slt,
voila j'ai un moteur de recherche immobilier auquel j'ai affecté une liste déroulante permettant de selectionner le prix d'un bien, donc une liste déroulante a laquelle j'ai affecté un minimum et une autre à laquelle j'ai affecté un maximum.
J'ai créé une table bien a laquelle j'ai affecté une ligne correspondant au prix.
A chaque bien j'ai donc rentré le prix et je souhaiterai donc connaitre la syntaxe permettant de faire correspondre mon choix compris entre un minimum et un maximum et le prix rentré dans la base.
voila mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
 
<td>
<select name="MIN" class="titrerecherche" style="width:95">
<option value="0" SELECTED>No Min</option>
 <option value="1">100,000</option>
<option value="2">125,000</option>
<option value="3">150,000</option>
<option value="4">175,000</option>
<option value="5">200,000</option>
<option value="6">225,000</option>
<option value="7">250,000</option>
<option value="8">275,000</option>
<option value="9">300,000</option>
<option value="10">325,000</option>
...
...
...
<option value="41">2,000,000</option>
</select>
</td>
 
<td>
<select name="MIN" class="titrerecherche" style="width:95">
<option value="0" SELECTED>No Min</option>
 <option value="1">100,000</option>
<option value="2">125,000</option>
<option value="3">150,000</option>
<option value="4">175,000</option>
<option value="5">200,000</option>
<option value="6">225,000</option>
<option value="7">250,000</option>
<option value="8">275,000</option>
<option value="9">300,000</option>
<option value="10">325,000</option>
<option value="11">350,000</option>
...
...
...
<option value="41">2,000,000</option>
</select>
</td>
 
$query = "select * from vente where 1=1 ";
switch($_POST["MIN"])
{
 
  case '0':
  $query .= " AND PRIX (cette partie a rajouter)  0";
  break;
 
  case '1' :
  $query .= " AND PRIX (cette partie a rajouter)  100000";
  break;
 
  case '2' :
  $query .= " AND PRIX (cette partie a rajouter)  125000";
  break;
 
  case '3' :
  $query .= " AND PRIX (cette partie a rajouter)  150000";
  break;
 
  case '4' :
  $query .= " AND PRIX (cette partie a rajouter)  175000";
  break;
 
  case '5' :
  $query .= " AND PRIX (BETWEEN? :oops: )  200000";
  break;
 
...
...
...
 
}
 
witch($_POST["MAX"])
{
 
  case '0':
  $query .= " AND  5000000";
  break;
 
  case '1' :
  $query .= " AND 100000";
  break;
 
  case '2' :
  $query .= " AND 125000";
  break;
 
  case '3' :
  $query .= " AND 150000";
  break;
 
  case '4' :
  $query .= " AND 175000";
  break;
 
  case '5' :
  $query .= " AND 200000";
  break;
 
...
...
...
 
}
merci pour votre aide.
mealtone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 20h24   #2
Membre habitué
 
Inscription : octobre 2003
Messages : 102
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : octobre 2003
Messages : 102
Points : 108
Points : 108
Salut,

pourquoi les switch?

construit directement ta requete de la sorte :

Code :
1
2
 
$query = "select * from vente where PRIX between ".$_POST["MIN"]." AND ".$_POST["MAX"];
attention, selon le type du champ PRIX tu sera peut être obligé de forcer le cast pour la comparaison, pas sur, mais c'est le cas pour les clauses ORDER BY ou il fait par défaut des comparaisons alphabétiques plutot que numérique (même pour les type décimal!)

dans ce cas, si les resultats sont abérants avec la première solution essaye çà :

Code :
1
2
 
$query = "select * from vente where PRIX between (".$_POST["MIN"]." + 0)AND (".$_POST["MAX"]." + 0)";
Mysql gèrera lui même le cast en numérique.
__________________
il n'y a pas de sotte existence
gisele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 20h41   #3
Membre habitué
 
Inscription : octobre 2003
Messages : 102
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : octobre 2003
Messages : 102
Points : 108
Points : 108
Euh oui pardon cela implique que tu mettre directement les bonnes valeurs à comparer dans les attributs "value" de tes listes déroulantes (celles que tu appliques dans les switch, "100000" a la place de "1", "125000" au lieu de "2" etc.)

De plus si ton champ PRIX est typé entier (int, bigint etc.), ne tiens pas compte de ma remarque sur les cast.
__________________
il n'y a pas de sotte existence
gisele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2006, 14h31   #4
Membre à l'essai
 
Inscription : novembre 2004
Messages : 144
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 144
Points : 24
Points : 24
yop gisele j'ai rajouté cette partie à la suite du code que tu connais déja
Code :
1
2
 
$query .= " AND PRIX between (".$_POST["MIN"]." + 0)AND (".$_POST["MAX"]." + 0)";
par contre j'ai modifié la valeur du premier option value correspondant a NoMax parceque si je ne renseigne pas cette valeur je n'ai aucun resultat, j'ai donc mis 10000000000 a la place de 0
Par contre si t'as une autre technique plus correct je suis preneur
mealtone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2006, 15h00   #5
Membre habitué
 
Inscription : octobre 2003
Messages : 102
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : octobre 2003
Messages : 102
Points : 108
Points : 108
lol,

y a assez de 0? et si c'est Bill Gates ou cresus qui vends sa maison sur ton site tu seras marron !!

non je déconne, oui ben bon reflexe, je voyais que çà a faire.
__________________
il n'y a pas de sotte existence
gisele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2006, 15h16   #6
Membre à l'essai
 
Inscription : novembre 2004
Messages : 144
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 144
Points : 24
Points : 24
Citation:
Envoyé par gisele
lol,

y a assez de 0? et si c'est Bill Gates ou cresus qui vends sa maison sur ton site tu seras marron !!
lol oé t'as raison je vais rajouté quelques zeros de plus on sait jamais
allez encore merci.
mealtone est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h59.


 
 
 
 
Partenaires

Hébergement Web