Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 22/02/2011, 20h31   #1
Invité de passage
 
Inscription : février 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 7
Points : 0
Points : 0
Par défaut problème de requète

Bonsoir,

Je bloque sur une requête.
Tout d'abord, voila en Français ce que je veux faire :

faire la moyenne de tous les nombres entre 2 dates lorsque le mois = 01 (par exemple et par extension, mois = 02 ....)

la date dans ma table est de la forme : YYYYMMDD (20110222)

Voila ce qui marche mais c'est pour toute ma table :
Code :
$sql = 'SELECT AVG(NB) as moyTN From x WHERE  month(date) = '".$mois."';
donc j'ai essayé ça mais le résultat est nul :
Code :
SELECT AVG(TN) AS moyTN FROM x WHERE (date BETWEEN $date1 AND $date2  AND month(date) = '".$mois."' )
J'ai aussi testé ça et ça fini par ce message :Query execution was interrupted :
Code :
SELECT AVG(TN) AS moyTN FROM  x WHERE  month(date) = '".$mois."' IN (SELECT TN FROM x WHERE (date BETWEEN $date1 AND $date2))

Voila, je sèche

merci de votre aide
meteo71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 20h38   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
la date dans ma table est de la forme : YYYYMMDD (20110222)
Ton champ n'est pas un champ date.
Les dates mysql sont au format YYYY-MM-DD.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 22h56   #3
Invité de passage
 
Inscription : février 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 7
Points : 0
Points : 0
effectivement,
mais je ne peux pas changer le format de mon champ.

si j'ai bien compris, ce qui ne marche pas c'est donc ça month(date) puisque date n'est pas un champ date !!

comment je pourrais contourner le problème ?

Merci
meteo71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 00h40   #4
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
Citation:
Envoyé par meteo71 Voir le message
effectivement,
mais je ne peux pas changer le format de mon champ.

si j'ai bien compris, ce qui ne marche pas c'est donc ça month(date) puisque date n'est pas un champ date !!

comment je pourrais contourner le problème ?

Merci
Ben tu prends les moyens nécessaires pour pouvoir changer ce format. Par exemple en faisant un update sur ces champs et les transformer au bon format.

Sinon tu peux toujours utiliser SUBSTRING pour récupérer le mois dans ta date mais la requête ne sera pas optimisée (par rapport à l'utilisation du champ date au bon format) :
Code :
$sql = 'SELECT AVG(NB) as moyTN From x WHERE SUBSTRING(date,5,2) = '".$mois."';
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/02/2011, 07h45   #5
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 943
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : Algérie

Informations professionnelles :
Activité : Developpeur- Amateur
Secteur : Santé

Informations forums :
Inscription : juin 2010
Messages : 943
Points : 554
Points : 554
Envoyer un message via Skype™ à redoran
Bonjour ;
Citation:
donc j'ai essayé ça mais le résultat est nul :
SELECT AVG(TN) AS moyTN FROM x WHERE (date BETWEEN $date1 AND $date2 AND month(date) = '".$mois."' )
après le formatage du champ date (YYYY-MM-DD), ajoute dans ta requête un champ dont sont contenu récupère le mois de tes dates en suite tu peux joué sur les group by par mois au lieu d'utilisé BETWEEN date sa sera plus rapide. c'est juste une proposition.
redoran est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/02/2011, 13h40   #6
Invité de passage
 
Inscription : février 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 7
Points : 0
Points : 0
merci à vous deux.

Avec la fonction SUBSTRING ça fonctionne parfaitement même si ce n'est pas optimisé comme vous le dites.


Je vais garder pour l'instant cette solution qui me convient.

Merci encore
meteo71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 17h22   #7
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
Juste pour terminer tu ne devrais pas nommé ton champ date "date" car c'est un mot réservé. Cela fonctionne avec mysql mais tu auras des pb si tu dois utiliser plus tard d'autres SGBD.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/02/2011, 22h38   #8
Invité de passage
 
Inscription : février 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 7
Points : 0
Points : 0
tu as sans doute raison mais j'ai tendance à me perdre avec les variables donc c'est plus par facilité qu'optimisation et cohérence !!

Au fait, j'ai finalement encore un petit soucis

lorsque je fais
Code :
SELECT MAX(TX) as maxTX
je veux en même temps, trouver la date ou la valeur max a été atteinte mais je n'ai pas réussi à le faire dans la même requete, c'est à dire que je fais une deuxième requete
Code :
SELECT date from $table where TX = maxTX
ce qui a mon avis n'est pas bon mais comment faire avec une seule requète
meteo71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 00h21   #9
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
J'ai du mal à comprendre. Tu peux en dire un peu plus, notamment sur ta première requête ?
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h57   #10
Invité de passage
 
Inscription : février 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 7
Points : 0
Points : 0
Citation:
Envoyé par ABCIWEB Voir le message
J'ai du mal à comprendre. Tu peux en dire un peu plus, notamment sur ta première requête ?
Voila la requête complète
Code :
SELECT MAX(TX) as maxTX FROM $table where date BETWEEN $date1 AND $date2 AND SUBSTRING(date,5,2) = '".$_GET['mois']."'
mais j'aurais en même temps besoin de connaitre la date de l'enregistrement du MAX(TX)

donc je fais une 2ème requete pour avoir la date mais je suppose que l'on peut sélectionner MAX(TX) et date dans la même requête.
meteo71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h31.


 
 
 
 
Partenaires

Hébergement Web