IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

problème de requète


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT AVG(NB) as moyTN From x WHERE  month(date) = '".$mois."';
    donc j'ai essayé ça mais le résultat est nul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    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

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 416
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT AVG(NB) as moyTN From x WHERE SUBSTRING(date,5,2) = '".$mois."';

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Bonjour ;
    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.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    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

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 416
    Par défaut
    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.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT date from $table where TX = maxTX
    ce qui a mon avis n'est pas bon mais comment faire avec une seule requète

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 416
    Par défaut
    J'ai du mal à comprendre. Tu peux en dire un peu plus, notamment sur ta première requête ?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  2. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  3. Problème de requètes concurentes
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 3
    Dernier message: 08/08/2003, 16h51
  4. Réponses: 2
    Dernier message: 16/07/2003, 14h40
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo