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 :

requète sur les dates dans mysql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut requète sur les dates dans mysql
    bonjour,

    J'ai une table où sont enregistrés des résultats dans une colonne 'A2F' et une colonne 'F2A' la date dans une colonne 'date' (NB une seule ligne par jour)
    Je veux faire la moyenne semaine par semaine (de date à date).
    J'ai trouvé pour extraire les données pour la première semaine, c'est à dire de J à J-7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $reponse = $bdd->query("SELECT * FROM statistiques WHERE date > NOW() - INTERVAL 7 DAY");
    $count = $reponse->rowCount();
    $i=1;
    while ($donnees = $reponse->fetch())
    	{
    	$date = $donnees['date'];
    	$date = explode('-', $date);
    	$date = array_reverse($date);
    	$datex[$i] = implode('/', $date);
    	$A2F = $donnees['A2F'];
    	$F2A = $donnees['F2A'];
    	$totalA2F=($totalA2F+$A2F);
    	$totalF2A=($totalF2A+$F2A);
    	$i=$i+1;
    	}
    	$moyenneA2F=($totalA2F/$count);
    	$moyenneA2F = number_format($moyenneA2F,2);
    	echo "du $datex[7] au $datex[1] la moyenneA2F est de #$moyenneA2F<br>";
    	$moyenneF2A=($totalF2A/$count);
    	$moyenneF2A = number_format($moyenneF2A,2);
    	echo "du $datex[7] au $datex[1] la moyenneF2A est de #$moyenneF2A<br>";
    Mais comment procéder pour extraire ensuite les données correspondant à la semaine J-8 à J-14, puis de J-15 àJ-21 et ainsi de suite ?

    En vous remerciant de votre aide,

    Laloupiote

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Je te propose une cure d'amaigrissement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $reponse = $bdd->query("SELECT DATE_FORMAT(`date`,'%Y-%v) as semaine, AVERAGE(A2F) as moyenneA2F, AVERAGE(F2A) as moyenneF2A
        FROM statistiques
        GROUP BY  DATE_FORMAT(`date`,'%Y-%v)
        ORDER BY  DATE_FORMAT(`date`,'%Y-%v) DESC");
    while ($donnees = $reponse->fetch()){
        echo '<p>semaine ' . $row['semaine'] . '</p>
            <ul>
                <li>la moyenneA2F est de ' . number_format($row['moyenneA2F'],2) . '</li>
                <li>la moyenneF2A est de ' . number_format($row['moyenneF2A'],2) . '</li>
            </ul>';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Merci pour cette réponse et pour la cure d'amaigrissement

    Mais, il doit y avoir un problème quelque part, car cela n'affiche rien (le reste de la page s'affiche normalement, mais pas le tableau prévu dans le while).
    Peut-être quelques précisions:
    - ma table s'appelle statistiques; elle comprend trois champs (date sous forme yyyy-mm-dd, A2F et F2A) et dans les deux derniers, j'ai des pourcentages exprimés avec deux chiffres après la virgule (60.55 55.47 etc.);
    - dans mon brouillon, j'avais mis un count pour compter le nombre de résultats, car il n'y a pas forcément un enregistrement tous les jours (il y a quelques rares jours où rien n'est enregistré); par contre, il n'y a qu'un seul enregistrement par jour;
    - mon serveur web : Apache/2.4.6 (Fedora) PHP/5.5.9.

    Bien cordialement,

  4. #4
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il y a une faute dans la requête, tu devrais activer les erreurs PDO quand tu developpes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $reponse = $bdd->query("SELECT DATE_FORMAT(`date`,'%Y-%v') as semaine, AVERAGE(A2F) as moyenneA2F, AVERAGE(F2A) as moyenneF2A
        FROM statistiques
        GROUP BY  DATE_FORMAT(`date`,'%Y-%v')
        ORDER BY  DATE_FORMAT(`date`,'%Y-%v') DESC");
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut
    Je suis désolé, mais je ne suis pas suffisamment fort pour exploiter cette réponse.

    J'ai un script de connection qui est dans un fichier à part auquel j'accède avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include ("../oui/loupiote_pdo.php");
    Le contenu de ce fichier est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try
    {
    $bdd = new PDO('mysql:host=localhost;dbname=loupiote', 'root', '******', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    	$bdd->query("set character set 'utf8'");//for using utf-8
    }
    catch (Exception $e)
    {
        die('Erreur : ' . $e->getMessage());
    // 	echo 'Erreur:'.$e->getMessage().'<br>';
    // 	echo 'Numero:'.$e->getCode();
    }
    Et je n'ai aucun message d'erreur même si je décommente les deux dernières lignes. Pourtant, ça ne marche pas, même avec la deuxième proposition.

    J'ai tenté également
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try
    {
    $bdd = new PDO('mysql:host=localhost;dbname=loupiote', 'root', '******');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    }
    catch (Exception $e)
    {
        die('Erreur : ' . $e->getMessage());
    // 	echo 'Erreur:'.$e->getMessage().'<br>';
    // 	echo 'Numero:'.$e->getCode();
    }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut
    Bon alors, si je neutralise mon fichier de connexion et si je lance ceci directement dans mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    try{
        $bdd = new PDO('mysql:host=localhost;dbname=loupiote', 'root', '******', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ));
        $reponse = $bdd->query("SELECT DATE_FORMAT(`date`,'%Y-%v') as semaine, AVERAGE(A2F) as moyenneA2F, AVERAGE(F2A) as moyenneF2A
                                                  FROM statistiques
                                                  GROUP BY  DATE_FORMAT(`date`,'%Y-%v')
                                                  ORDER BY  DATE_FORMAT(`date`,'%Y-%v') DESC");
    }
    catch(Exception $e){
        exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
    }
    while ($donnees = $reponse->fetch()){
             echo '<p>semaine ' . $row['semaine'] . '</p>
                       <ul>
                            <li>la moyenneA2F est de ' . number_format($row['moyenneA2F'],2) . '</li>
                            <li>la moyenneF2A est de ' . number_format($row['moyenneF2A'],2) . '</li>
                       </ul>';
    }
    Ça m'affiche ceci
    Catched exception at line 37 : SQLSTATE[HY000]: General error: 1548 Cannot load from mysql.proc. The table is probably corrupted
    Ça m'étonne parce que, jusqu'à présent, les requetes que je fais sur cette table et, notamment, celles que j'indiquais dans mon premier message, elle fonctionne.

    À partir de phpmyadmin, j'ai tenté un "vérifier la table" qui n'a rien renvoyé de spécial.

    Que faire ?

  7. #7
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    En ligne de commande execute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_upgrade -uroot -p --force
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut
    Ok maintenant, ça affiche
    Catched exception at line 39 : SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION loupiote.AVERAGE does not exist

  9. #9
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Pardon c'est AVG et pas AVERAGE.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut
    Ah, alors, c'est génial !
    Super merci...

    Attends non. J'avais mis résolu, mais ça ne va encore pas. Ça me donne ceci:
    semaine
    
        la moyenneA2F est de 0.00
        la moyenneF2A est de 0.00
    
    semaine
    
        la moyenneA2F est de 0.00
        la moyenneF2A est de 0.00
    
    semaine
    
        la moyenneA2F est de 0.00
        la moyenneF2A est de 0.00
    
    semaine
    
        la moyenneA2F est de 0.00
        la moyenneF2A est de 0.00


    Bien cordialement,

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut
    Ce coup-là, c'est bon ! C'est le row qu'il faut remplacer par donnees
    Merci beaucoup.
    Du coup, j'attends un peu pour mettre résolu, mais apparemment, c'est bon!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requêtes sur les dates
    Par Sh4dow49 dans le forum SQL
    Réponses: 16
    Dernier message: 04/08/2008, 14h25
  2. Operation sur les dates dans SAS
    Par scorpion0686 dans le forum SAS Base
    Réponses: 5
    Dernier message: 08/04/2008, 12h48
  3. Réponses: 1
    Dernier message: 30/01/2008, 10h16
  4. [SQL] Requête sur les dates
    Par JohnnyWalk dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/12/2007, 19h24

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