Format de requete SQL

Eléphanteau du PHP | 14 Messages

28 avr. 2008, 11:55

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....

Mammouth du PHP | 19672 Messages

28 avr. 2008, 12:04

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...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 avr. 2008, 12:55

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 14 Messages

29 avr. 2008, 09:26

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...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

29 avr. 2008, 09:31

Voir conseils de débuggage, point n°2 : http://www.phpfrance.com/forums/voir_sujet-19378.php

Eléphant du PHP | 422 Messages

29 avr. 2008, 09:57

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 :)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 avr. 2008, 10:18

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" ;)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 14 Messages

29 avr. 2008, 10:18

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...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

29 avr. 2008, 10:25

Mon message il compte pas ? On peut avoir la requête générée ?

Eléphant du PHP | 422 Messages

29 avr. 2008, 10:30

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,... ?

Mammouth du PHP | 693 Messages

29 avr. 2008, 11:22

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...

Eléphant du PHP | 422 Messages

29 avr. 2008, 11:28

J'en suis pas si sur que ca...
La meilleure solution, c'est d'essayer :)

Eléphanteau du PHP | 14 Messages

29 avr. 2008, 11:44

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 =)

Mammouth du PHP | 693 Messages

29 avr. 2008, 11:57

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

Eléphant du PHP | 422 Messages

29 avr. 2008, 12:01

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.