Page 1 sur 2

Format de requete SQL

Posté : 28 avr. 2008, 11:55
par tetaklak123hop
Salut a tous.

Apres quelques semaines d'absence (vacances oblige...) je reviens verzs vous pour vous casser les neurones avec mes questions a 2 balles... =)

Alors le problème du jour:

Je cherche a effectuer une requête sql dans mes pages PHP, qui recupererais des données dans ma base avec 2 conditions

Ça devrait donner a peu près ca (bien que ceci ne marche pas...):

Code : Tout sélectionner

$requete="SELECT * FROM `historique` WHERE `Date` BETWEEN '$dateDebut' AND '$dateFin' AND WHERE 'IdStation' = '$IdStation' ;" ;
Donc relever tous les enregistrements compris entre 2 dates ET ayant un IdStation précisé.



Dans l'attente de votre reponse, je vous remercie d'avance....

Posté : 28 avr. 2008, 12:04
par Cyrano
vire le deuxième "WHERE" qui n'a rien à faire là. Une clause WHERE s'écrit :

Code : Tout sélectionner

WHERE condition AND autre_condition AND encore_une etc...

Posté : 28 avr. 2008, 12:55
par Truc
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Posté : 29 avr. 2008, 09:26
par tetaklak123hop
Bonjour a tous =)

Ma requete, avec la syntaxe suivante ne fonctionne pas...

Code : Tout sélectionner

$requete="SELECT * FROM `historique` WHERE `Date` BETWEEN '$dateDebut' AND '$dateFin' AND 'IdStation' = '$IdStation' ;" ;

Il s'agit a mon avis de la présence du BETWEEN ... AND ...

J'ai cherché un peu a droite a gauche depuis hier, mais je galere toujours autant...

Posté : 29 avr. 2008, 09:31
par ouckileou
Voir conseils de débuggage, point n°2 : http://www.phpfrance.com/forums/voir_sujet-19378.php

Posté : 29 avr. 2008, 09:57
par caroube

Code : Tout sélectionner

$requete="SELECT * FROM `historique` WHERE `Date` BETWEEN '$dateDebut' AND '$dateFin' AND 'IdStation' = '$IdStation' ;" ;
A force de mettre des `, des ' et des ", il est fatal qu'on ne puisse plus rien voir.

Commence d'abord par virer tous les ` : ils sont absolument inutiles, sauf si tu t'amuses à avoir des noms de champs ou de tables qui comportent des espaces. Ensuite, les ' ne sont absolument pas obligatoires autour des nombres (et je suppose que ton id est un nombre) : enlève les

Et tant que tu y es : le ; à la fin ne sert à rien.

Et ensuite, je pense que l'erreur te sautera aux yeux :)

Posté : 29 avr. 2008, 10:18
par Truc
Commence d'abord par virer tous les ` : ils sont absolument inutiles, sauf si tu t'amuses à avoir des noms de champs ou de tables qui comportent des espaces.
ou des noms réservés tels que "date" ;)

Posté : 29 avr. 2008, 10:18
par tetaklak123hop
J'ai supprimé tous les ' mais le ; est necessaire, car c'est une fin de ligne de code php, me semble t'il...

Et l'erreur doit encore etre planquée quelque part, vu qu'elle ne m'a pas sauté aux yeux...

Comme je t'ai dit, je soupçonne le BETWEEN... AND... de m'empecher d'y coller une condition supplémentaire...

Posté : 29 avr. 2008, 10:25
par ouckileou
Mon message il compte pas ? On peut avoir la requête générée ?

Posté : 29 avr. 2008, 10:30
par caroube
je parlais du ; à la fin de la requête, pas du ; à la fin de la ligne php

ensuite, fais un echo de ta requête et pose toi la question si cette clause renvoie un résultat ou pas

Code : Tout sélectionner

AND 'IdStation' = 23
ou des noms réservés tels que "date"
Tu peux tout à fait écrire en MySQL select date from date sans mettre de `
Par contre, appeler un champ date, c'est non seulement une prise de risque avec la gestion des mots-réservés par le moteur du SGBD, mais c'est aussi un manque de précision dans la signification du champ. C'est comme si on appelait un champ "nombre" ou un champ "chaine" : Date, oui, mais date de quoi ? Pensons à celui qui va reprendre le code dans 1 an et qui va se demander : date de naissance, date de création, date d'enregistrement, date de fermeture, date de modification,... ?

Posté : 29 avr. 2008, 11:22
par orgerix
Il faut enlever les guillement autour de Idstation, qui doit être un nom de champ
Tu peux tout à fait écrire en MySQL select date from date sans mettre de `
J'en suis pas si sur que ca...

Posté : 29 avr. 2008, 11:28
par caroube
J'en suis pas si sur que ca...
La meilleure solution, c'est d'essayer :)

Posté : 29 avr. 2008, 11:44
par tetaklak123hop
Alors j'ai trouvé une solution a mon probleme...

Dans ma table, il y a d abord l attribut IdStation, et apres, la date.

En reformulant ma requete comme cela, ca marche parfaitement

SELECT * FROM `historique` WHERE `IdStation` = '1' AND `Jour` BETWEEN '2007-01-01' AND '2010-01-01';

A force de mettre des `, des ' et des ", il est fatal qu'on ne puisse plus rien voir.

Commence d'abord par virer tous les ` : ils sont absolument inutiles, sauf si tu t'amuses à avoir des noms de champs ou de tables qui comportent des espaces. Ensuite, les ' ne sont absolument pas obligatoires autour des nombres (et je suppose que ton id est un nombre) : enlève les
Les ` sont ajoutés par Phpmyadmin lorsque je fais ma requete, donc en les laissant, ca marche parfaitement =)



Merci de votre patience =)

Posté : 29 avr. 2008, 11:57
par orgerix
L'ordre de ne change rien.

Tu as juste remplacé les ' par des ` autour de IdStation, ce qui maintenant est corect.

@caroube : En effet ca marche, moi j'avais eu des problème avec force. Enfin, de toute facon, c'est une mauvaise habitude

Posté : 29 avr. 2008, 12:01
par caroube
Tu as résolu ton problème, mais pour une mauvaise raison
Tu avais ceci

Code : Tout sélectionner

'IdStation' = '$IdStation'
et tu es passé à ceci

Code : Tout sélectionner

`IdStation` = '$IdStation'
C'est pour cela que je te demandais de virer ces ` : tu es passé d'une quote droite (') à une quote inverse (`) autour de IdStation.

Dans le premier cas, tu testais si la chaîne de caractère 'IdStation' est égale à la chaîne de caractère '1' ou '3', ce qui est faux. Dans le deuxième cas, tu vérifies la valeur du champ IdStation.