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 :

Afficher les 24 dernières heures depuis l'heure actuelle


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club Avatar de Saturos2k4
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2015
    Messages : 26
    Points : 8
    Points
    8
    Par défaut Afficher les 24 dernières heures depuis l'heure actuelle
    Bonjour,

    je cherche à générer des résultats d'une table sur les 24 dernières heures, à partir de l'heure actuelle, voici la table en question :



    Chaque ligne ci-dessus correspond à un signalement.

    Ma requête SQL actuelle est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT date_format(`signalements`.`date_submit`,"%d/%m à %Hh00") as `date_submit`,count(`signalements`.`id`) as `id` FROM `signalements` WHERE date_submit > DATE_SUB(NOW(), INTERVAL 72 HOUR) GROUP BY hour(`signalements`.`date_submit`),date_format(`signalements`.`date_submit`,"%d/%m à %Hh00") ORDER BY date_submit ASC
    Ce qui sort avec un array php : (entre parenthèse le nombre de signalements, par exemple)

    05/09 à 10h00 (1)
    05/09 à 17h00 (2)
    05/09 à 18h00 (1)
    06/09 à 08h00 (4)
    06/09 à 09h00 (1)
    06/09 à 10h00 (1)

    Je voudrais arriver à ce résultat :



    Donc un résultat sous cette forme (on compte le nombre de signalements chaque heure entre parenthèses) :

    05/09 à 14h00 (1)
    05/09 à 15h00 (4)
    05/09 à 16h00 (1)
    05/09 à 17h00 (3)
    05/09 à 18h00 (1)
    05/09 à 19h00 (2)
    04/09 à 20h00 (3)
    05/09 à 21h00 (3)
    05/09 à 22h00 (1)
    05/09 à 23h00 (2)
    06/09 à 00h00 (1)
    06/09 à 01h00 (0)
    06/09 à 02h00 (2)
    06/09 à 03h00 (1)
    06/09 à 04h00 (4)
    06/09 à 05h00 (1)
    06/09 à 06h00 (1)
    06/09 à 07h00 (1)
    06/09 à 08h00 (1)
    06/09 à 09h00 (1)
    06/09 à 10h00 (0)
    06/09 à 11h00 (4)
    06/09 à 12h00 (0)
    06/09 à 13h00 (2)
    06/09 à 14h00 (1)

    Même si le comptage des signalements est à 0 (0), je veux quand même pouvoir afficher cette valeur avec l'heure correspondante comme ci-dessus.

    Merci d'avance pour votre aide,

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 394
    Points : 15 750
    Points
    15 750
    Par défaut
    j'ai essayé votre requête avec un petit jeu de test et j'ai récupéré les bonnes sommes.
    essayez de retirez le 1er bout "hour..." dans le "group by", ça ne devrait pas être nécessaire puisqu'il y a déjà "date_format" qui suffit.

  3. #3
    Futur Membre du Club Avatar de Saturos2k4
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2015
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Merci pour votre réponse, j'ai retiré
    hour(`signalements`.`date_submit`),
    et cela affiche :

    04/09 à 06h00 (1)
    04/09 à 07h00 (4)
    04/09 à 08h00 (1)
    04/09 à 09h00 (3)
    04/09 à 13h00 (1)
    04/09 à 16h00 (2)
    04/09 à 17h00 (3)
    05/09 à 06h00 (3)
    05/09 à 07h00 (1)
    05/09 à 08h00 (2)
    05/09 à 09h00 (1)
    05/09 à 10h00 (1)
    05/09 à 17h00 (2)
    05/09 à 18h00 (1)
    06/09 à 08h00 (4)
    06/09 à 09h00 (1)
    06/09 à 10h00 (1)
    06/09 à 15h00 (1)

    Mais cela ne marche pas, il me faudrait les 24 dernières heures depuis l'heure actuelle :

    05/09 à 15h00 (0)
    05/09 à 16h00 (1)
    05/09 à 17h00 (3)
    05/09 à 18h00 (1)
    05/09 à 19h00 (2)
    04/09 à 20h00 (3)
    05/09 à 21h00 (3)
    05/09 à 22h00 (1)
    05/09 à 23h00 (2)
    06/09 à 00h00 (1)
    06/09 à 01h00 (0)
    06/09 à 02h00 (2)
    06/09 à 03h00 (1)
    06/09 à 04h00 (4)
    06/09 à 05h00 (1)
    06/09 à 06h00 (1)
    06/09 à 07h00 (1)
    06/09 à 08h00 (1)
    06/09 à 09h00 (1)
    06/09 à 10h00 (0)
    06/09 à 11h00 (4)
    06/09 à 12h00 (0)
    06/09 à 13h00 (2)
    06/09 à 14h00 (1)
    06/09 à 15h00 (3)
    06/09 à 15h00 (1)

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 394
    Points : 15 750
    Points
    15 750
    Par défaut
    pour les heures à 0 ce n'est pas un souci, je pense que c'est plus simple à faire en php.

    par contre les valeurs ont encore un problème, puisque vous avez par exemple 4 à 08 h 00 et vous dites que ça devrait être 1 ? ou alors c'est normal et ce sont juste des données de test ?

  5. #5
    Futur Membre du Club Avatar de Saturos2k4
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2015
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    D'accord merci, je ne vois pas comment faire en php.

    Concernant les valeurs elles sont choisies au hasard, c'est juste pour illustrer l'exemple.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 394
    Points : 15 750
    Points
    15 750
    Par défaut
    vous pouvez faire comme cela pour avoir un tableau avec les zéros :
    Code php : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    // tableau des données récupérées à partir de la requête mysql
    $donnees_mysql = [
    	"07/09 à 10 h 00" => 45,
    	"07/09 à 21 h 00" => 6,
    	"07/09 à 22 h 00" => 38,
    	"08/09 à 10 h 00" => 27,
    	"08/09 à 12 h 00" => 85,
    	"08/09 à 19 h 00" => 4,
    	"08/09 à 20 h 00" => 45,
    ];
     
     
     
    $maintenant = time();
    $il_y_a_24_heures = strtotime("-1 day", $maintenant);
     
    $parcours = $il_y_a_24_heures;
     
     
    $resultats = [];
     
    while ($parcours < $maintenant) {
     
    	$date_heure = date("d/m à H \h 00", $parcours);
     
    	$resultats[$date_heure] = 0;
     
    	// s'il y a une donnée pour cette heure
    	if (isset($donnees_mysql[$date_heure])) {
    		$resultats[$date_heure] = $donnees_mysql[$date_heure];
    	}
     
     
    	// prochaine heure
    	$parcours = strtotime("+1 hour", $parcours);
     
    }
     
     
    // ici $resultats contient toutes les heures avec des 0 quand il n'y a pas de données

  7. #7
    Futur Membre du Club Avatar de Saturos2k4
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2015
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Effectivement avec un
    foreach ($resultats as $value) {
    echo $value, "\n";
    }
    j'arrive à avoir : 38 0 0 0 0 0 0 0 0 0 0 0 27 0 85 0 0 0 0 0 0 4 45 0 , je vais tester ça demain.

  8. #8
    Futur Membre du Club Avatar de Saturos2k4
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2015
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Je dois avouer que je ne suis pas très à l'aise avec les tableaux, comment dois-je faire pour avoir cette architecture :

    $donnees_mysql = [
    "07/09 à 10 h 00" => 45,
    "07/09 à 21 h 00" => 6,
    "07/09 à 22 h 00" => 38,
    "08/09 à 10 h 00" => 27,
    "08/09 à 12 h 00" => 85,
    "08/09 à 19 h 00" => 4,
    "08/09 à 20 h 00" => 45,
    ];
    à partir de mon code :

    $query_s1 = mysqli_query($bdd, 'SELECT date_format(`signalements`.`date_submit`,"%d/%m à %Hh00") as `date_submit`,count(`signalements`.`id`) as `id` FROM `signalements` WHERE date_submit >NOW() - INTERVAL 72 HOUR GROUP BY hour(`signalements`.`date_submit`),date_format(`signalements`.`date_submit`,"%d/%m à %Hh00") ORDER BY date_submit ASC');

    echo '<strong>24 hours :</strong><br>';


    while($row = mysqli_fetch_array($query_s1))
    {
    Si vous pouvez détailler pour que j'assimile mieux le principe des tableaux,

    J'ai testé ce code :

    while($row = mysqli_fetch_assoc($query_s1))
    {
    $dataPoints[] = $row;
    }

    echo "".$dataPoints[0]["date_submit"]." => ".$dataPoints[0]["id"].",";
    Cela me sort :

    06/09 à 15h00 => 1,
    C'est juste la première valeur de la table, étrange

    Merci encore pour le temps dédié

Discussions similaires

  1. [XL-2013] Code prend 1 heure pour afficher les resultats
    Par Mateos_hiss dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 17/06/2016, 10h50
  2. [MySQL] Afficher les tickets superieurs à 4 heures
    Par maxdata dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 30/05/2013, 11h38
  3. php afficher les heures avec minutes qui reste..
    Par xunil2003 dans le forum Langage
    Réponses: 1
    Dernier message: 21/07/2012, 21h51
  4. Afficher les milièmes dans un champs Date Heure
    Par zooffy dans le forum ASP.NET
    Réponses: 8
    Dernier message: 27/07/2007, 14h51

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