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 :

requete avec colonne par année en bdd [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut requete avec colonne par année en bdd
    Bonjour,

    j'ai actuellement une table 'intervention' qui contient les enregistrements suivants :
    • id (un champ auto-incrémenté)
    • nature (champ varchar)
    • commune (champ varchar)
    • date (champ date)


    vous l'aurez peu être compris je sauvegarde les différentes interventions par nature pour différentes dates et différentes communes.
    et j'ai donc une requête qui m'affiche pour chaque année présente dans la table un nouveau tableau html avec le nombres d'intervention par nature, donc voici le code :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
    //d'aborde je recupére toute les années presente en table 
    $sql_chaque_annne = 'SELECT YEAR(intervention.date) as annee FROM intervention WHERE commune = "'.$var_caserne.'" GROUP BY annee ORDER BY annee DESC';
    $exec_chaque_annne = mysql_query($sql_chaque_annne) or die('Erreur SQL !'.$sql_chaque_annne.'<br />'.mysql_error());
     
    while ($data_chaque_annne = mysql_fetch_array($exec_chaque_annne)) {
    	$annee_extraite = $data_chaque_annne['annee']; //contient les années
     
    //ma requete qui liste le nombre d'intervention par nature	
    $sql_nombre_inter = 'SELECT count(id) as nbr_inter, nature, YEAR(date) as annee FROM intervention WHERE commune = "'.$var_caserne.'" AND YEAR(date) = "'.$annee_extraite.'" GROUP BY nature ORDER BY nbr_inter DESC';
     
    $exec = mysql_query($sql_nombre_inter) or die('Erreur SQL !'.$sql_nombre_inter.'<br />'.mysql_error());	?>
    			<h3>Nombres d'intervention(s) par Nature(s) pour l'année <?php echo $annee_extraite; ?></h3>
     <table class="table table-striped">
                <thead>
                  <tr>
                    <th>Nature</th>
    				<th>Nombres d'interventions</th>
                  </tr>
                </thead>
                <tbody>
    		<?php
    		while ($data = mysql_fetch_array($exec)) {
    	?>
    			<tr>
    				<td><?php echo $data['nature']; ?></td>
    				<td><?php echo $data['nbr_inter']; ?></td>
    			</tr>
     		<?php
    		}
    ?>		
                </tbody>
              </table>
    	<?
    }
    ?>
    on code fonctionne bien, mais ayant des années remontant a 2001 cela me fait plus de 15 tableaux ! je me demandé si il était possible de réaliser ceci en un seul tableau avec les lignes natures et pour chaque colonnes une année !
    J'ai essayé de bidouiller quelque chose mais je n'y arrive pas quelqu'un aurait il un exemple ou a t'il déjà fait ceci ?

    D'avance je vous remercie

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    C'est possible, le problème étant de réorganiser les données récupérées de façon à les afficher facilement.
    1ère étape : récupérer toutes les données en une seule fois. Au lieu de faire autant de récupération que d'années, il faut faire une seule requête qui récupère les données en les regroupant par nature et par année.
    2e étape : regrouper les données. Le plus simple est de parcourir les données et de les indexer par nature, puis par année. L'objectif est d'obtenir un tableau de données de la forme :
    (
    nature_1 => ( 
    	2010 => 2, 
    	2011 => 5, 
    	2012 => 6),
    nature_2 => ( 
    	2010 => 8, 
    	2011 => 24, 
    	2012 => 3)
    )
    3e : boucler sur le tableau pour construire la table HTML.

    Est-ce que le principe te parait clair ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    Non désolé je ne saisis pas très bien, cela se fait dans la requête SQL ?
    est ce que vous auriez un exemple, ou une adresse web expliquant le principe ?

    d'avance je vous remercie pour votre aide.

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    pour la 1re étape, cela se fait en retournant les résultats de toutes les années comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'SELECT count(id) as nbr_inter, nature, YEAR(date) as annee FROM intervention WHERE commune = "'.$var_caserne.'" GROUP BY nature ORDER BY nbr_inter DESC';
     
    $exec = mysql_query($sql) or die('Erreur SQL ! ' . $sql . '<br />' . mysql_error());
    et ensuite pour la 2e étape vous mettez en forme les résultats comme cela :
    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
    $resultats = [];
     
     
    while ($data = mysql_fetch_array($exec)) {
     
    	$nbr_inter = $data["nbr_inter"];
    	$nature = $data["nature"];
    	$annee = $data["annee"];
     
     
    	if (!isset($resultats[$nature]) {
    		$resultats[$nature] = [];
    	}
     
    	$resultats[$nature][$annee] = $nbr_inter;
     
    }
     
    echo "<pre>";
    print_r($resultats);
    echo "</pre>";

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    merci pour ton aide, je vois mieux avec ce bout de code, mais j'ai quelques question,

    a quoi sert ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (!isset($resultats[$nature]) {
    		$resultats[$nature] = [];
    	}
    tu vérifie si nature est vide ? si j'ai bien compris et si il est vide tu lui affecte rien c'est ca ?

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    pour avoir des informations sur une fonction, vous pouvez aller à l'adresse "php.net/ + nom de la fonction" par exemple http://php.net/isset

    et pour [], il s'agit d'un tableau vide : http://php.net/manual/fr/language.types.array.php

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

Discussions similaires

  1. Requete avec regroupement par mois.. ou pas ?
    Par flamby6969 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 19/06/2008, 12h43
  2. Réponses: 3
    Dernier message: 07/09/2007, 15h29
  3. Requete avec cumul par semaine
    Par Fleur-Anne.Blain dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/07/2007, 15h24
  4. requete avec colonne parametré en Plsql 9i
    Par ktano dans le forum PL/SQL
    Réponses: 6
    Dernier message: 13/02/2007, 14h45
  5. [Access] requete avec concaténation par ligne
    Par stoonman dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/11/2006, 18h35

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