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 :

affiché résultat dans tableau croisé [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    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
    Points : 279
    Points
    279
    Par défaut affiché résultat dans tableau croisé
    Bonjour mon problème est assez complexe, enfin surtout pour moi,
    Tout d'abord j'ai une table personnels que voici:
    • id_pers
    • pers_nom
    • pers_prenom
    • pers_centre (contient l'id de la caserne)


    et j'ai une table manoeuvres que voici :
    • id_fma
    • fma_libelle (le nom de la manœuvre que l'on appel FMA à l'armée)


    et enfin une table pointage qui inscrit l'id de la personne qui a fait une manœuvre ainsi que l'id de la manœuvre faite ainsi que la date de réalisation :
    • id_pointer
    • pointer_sp (contient l'id de la personne pointer à la manoeuvre)
    • pointer_fma (contient l'id de la manoeuvre de la table manoeuvres)
    • pointer_date (la date de réalisation)


    Voila j'ai pour objectif de crée un tableau dans le quel les colonnes représenterais les manoeuvres de ma table et les lignes représenterais les personnes ainsi si une personne à fait une manœuvre (d’après la table recensement) une croix apparaîtrais à la jonction de la ligne et la colonne correspondante !

    J'ai toujours réalisé de simple tableaux en php avec des lignes qui affiche des résultats avec par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row_enregistrement['nom'];
    Alors je ne sais pas si cela est réalisable ??? mais si vous avez des exemples ou des sites qui ont parle je suis preneur !

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    c'est réalisable mais il faut se poser la question du nombre de colonnes.
    Si par exemple tu as 200 personnes qui participent à une manoeuvre, tu vas afficher 200 colonnes ?

  3. #3
    Membre actif
    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
    Points : 279
    Points
    279
    Par défaut
    Cool c'est réalisable, non je limiterais mon tableau à leur caserne d'appartenance avec un , (5 étant l'id de la caserne de toulon)
    aurais tu un exemple ou un Tutorial qui explique se genre de réalisation ?
    Est ce difficile ? merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Mais même si tu limites à TOULON, tu penses avoir au maximum combien de colonnes ?

    Aurais-tu un bout de code d'extraction des données par exemple et/ou un début de réalisation ?

    Ici tu as une discussion avec la même problématique (par analogie)

  5. #5
    Membre actif
    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
    Points : 279
    Points
    279
    Par défaut
    au maximum 15 colonnes environ,
    j'ai bien avancé durant une bonne partie de la nuit;

    voila mon code, j'ai suivi le lien que tu ma donné 'rawsrc' et j'ai était fouiller un peu sur google :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    <?php
    mysql_select_db($database_formation, $formation);
    $result=mysql_query("
    SELECT id_pers, pers_nom, pointage.pointer_fma, manoeuvres.id_fma		
    FROM personnels
    LEFT OUTER JOIN pointage ON pointage.pointer_sp = personnels.id_pers
    LEFT OUTER JOIN manoeuvres ON manoeuvres.id_fma = pointage.pointer_fma 
    WHERE pers_centre = 5
    	UNION
    SELECT id_pers, pers_nom, pointage.pointer_fma, manoeuvres.id_fma		
    FROM personnels
    LEFT OUTER JOIN pointage ON pointage.pointer_sp = personnels.id_pers
    LEFT OUTER JOIN manoeuvres ON manoeuvres.id_fma = pointage.pointer_fma 
    WHERE pers_centre = 5
    ") or die(mysql_error());
     
    $array=array();
    $personne = array();
    $manoeuvres = array();
    while ($data = mysql_fetch_array($result))
    {
       if (isset($data['pers_nom']))
       {
          $personne[] = $data['pers_nom'];//s
       }
       if (isset($data['manoeuvres.id_fma']))
       {
          $manoeuvres[] = $data['manoeuvres.id_fma'];
       }
       if (isset($data['pers_nom']) && $data['pointer_fma'])
       {
          if (!isset($array[$data['pers_nom']])) $array[$data['pers_nom']] = array();
          $array[$data['pers_nom']][$data['pointer_fma']] = 1;
       }
    }
    $manoeuvres = array_unique($manoeuvres);
    $personne = array_unique($personne);//s
    echo 'Manoeuvres<br/><pre>'; print_r($manoeuvres); echo '</pre>';
    echo 'Nom<br/><pre>'; print_r($personne); echo '</pre>';
    echo 'Pointer<br/><pre>'; print_r($array); echo '</pre>';
     
     
    ?>
    <table>
    <thead>
    <tr>
    	<th>Id<br/>manoeuvres</th>
     
     
    <?php 
    foreach($personne as $t)
    {
    	echo "<th>".$t."</th>";
    }
    	echo "</tr>";
    	echo "</thead>";
    	echo "<tbody>";
     
     
    foreach ($manoeuvres as $d)
    {
    	echo "<tr><td>".$d['manoeuvres.id_fma']."</td>";
     
     
     
    foreach($personne as $t)
    {
    if(!empty ($array[$t][$d]))
    {
    if (($array[$t][$d]) !=0)//Si dans l'array personne/manoeuvre on a une valeur différente de 0 alors
    {
    	echo '<td>OK</td>';
    }
    else
    {
    	echo '<td></td>';
    }
     
    }
    else
    {
    	echo '<td></td>';
    }
    }
     
    }
    echo '</tr>';
     
    	?>
    ce n'est pas encore le résultat que je souhaite mais en tout cas j'obtient ceci :
    Manoeuvres
    Array
    (
    [0] => 10
    [1] => 20
    [2] => 19
    [3] => 23
    [4] => 24
    [5] => 13
    [6] => 14
    [7] => 22
    [8] => 16
    [9] => 21
    [10] => 9
    [11] => 11
    [12] => 12
    [13] => 25
    [20] => 46
    [21] => 54
    [31] => 17
    [43] => 50
    [45] => 28
    [52] => 47
    [82] => 15
    [87] => 45
    )
    Nom
    Array
    (
    [0] => PIERRE
    [22] => DUPONT
    [32] => DURANT
    )
    Pointer
    Array
    (
    [PIERRE] => Array
    (
    [10] => 1
    [20] => 1
    [19] => 1
    [23] => 1
    [24] => 1
    [13] => 1
    [14] => 1
    [22] => 1
    [16] => 1
    [21] => 1
    [9] => 1
    [11] => 1
    [12] => 1
    [25] => 1
    [46] => 1
    [54] => 1
    )

    [DUPONT] => Array
    (
    [19] => 1
    [23] => 1
    [24] => 1
    [13] => 1
    [14] => 1
    [22] => 1
    [16] => 1
    [20] => 1
    [9] => 1
    [17] => 1
    )

    [DURANT] => Array
    (
    [19] => 1
    [23] => 1
    [24] => 1
    [13] => 1
    [14] => 1
    [10] => 1
    [22] => 1
    [16] => 1
    [21] => 1
    [9] => 1
    [11] => 1
    [50] => 1
    [12] => 1
    )

    )
    Id
    manoeuvres PIERRE DUPONT DURANT
    1 OK OK OK
    2 OK OK
    1 OK OK OK
    2 OK OK OK
    2 OK OK OK
    1 OK OK OK
    1 OK OK OK
    2 OK OK OK
    1 OK OK OK
    2 OK OK OK
    9 OK OK OK
    1 OK OK
    1 OK OK
    2 OK
    4 OK
    5 OK
    1 OK
    5 OK
    2 OK
    4 OK
    Le constat c'est que les tableau "nom" et "array" et manoeuvres sont bien rempli est présent.
    sauf pour le 'array' manoeuvres ne contient pas toutes les manoeuvres de ma table manoeuvres mais juste les id de celle présente dans la table pointage.pointer_fma

    De plus dans mon 'array' manoeuvre j'ai ceci par exemple:
    le 10 correspond à l'id de la manoeuvre,
    Mais alors pourquoi dans mon tableau croisé dynamique tous en bas je n'ai pas se numéro mais une suite de nombre ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Id
    manoeuvres
    1
    2
    1
    2
    2
    Vous en pensez quoi ?

    par contre peu être que la requête union pose problème car je cherche les gens qui ne sont pas pointer pour les manœuvre dans la table 'pointage' !!!

    (il est tard, j'en ai assez je vais me couché car demain travail)

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Tu devrais décomposer ton problème :

    1. Dans un premier temps tu listes les manoeuvres pour lesquelles tu souhaites avoir des infos sur le pointage.
      Parce que n'avoir que les manoeuvres auxquelles les individus sélectionnés ont participé va te produire un tableau qu'avec des croix partout.
    2. Ensuite, tu extraits les données de pointage pour les manoeuvres définies précédemment et pour le site visé
    3. Et enfin, tu mets en forme le tout (avec un peu de réflexion, le fil que je t'ai donné ronge cet os)


    Bref je ne pense pas qu'il faille faire un UNION ou quelque chose de ce genre.

  7. #7
    Membre actif
    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
    Points : 279
    Points
    279
    Par défaut
    ok j'ai décomposé et c'est ma requête sql qui pose problème, enfin surtout le 'id_fma' (l'id de la manoeuvre)
    car je n'affiche que les manoeuvres déjà faites, donc celle présente dans la table
    'pointage' et pas la totalité des manoeuvres de ma table manoeuvres alors que celle ci apparaît dans ma requêtes !

    je ne comprend pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT pr1.pers_nom, man.id_fma, pt.pointer_fma FROM pointage AS pt 
    LEFT JOIN personnels AS pr1 ON pr1.id_pers = pt.pointer_sp
    LEFT JOIN manoeuvres AS man ON man.id_fma = pt.pointer_fma
    WHERE pr1.pers_centre = 5

  8. #8
    Membre actif
    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
    Points : 279
    Points
    279
    Par défaut
    pardon une petite erreur de (left / right) j'ai toujours eu du mal avec ces deux là.

    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT pr1.pers_nom, man.id_fma, pt.pointer_fma FROM pointage AS pt 
    RIGHT OUTER JOIN personnels AS pr1 ON pr1.id_pers = pt.pointer_sp
    RIGHT OUTER JOIN manoeuvres AS man ON man.id_fma = pt.pointer_fma
    AND pr1.pers_centre = 5
    merci 'rawsrc',

    J'annonce donc ce sujet "RESOLU"

  9. #9
    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
    Points : 1 031
    Points
    1 031
    Par défaut
    salut ; je crois que les fonctionnalités d'agrégats type génération tableau croisé dynamique n'est pas encore existante
    tu peux aussi avoir le même résultat avec requête de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    .....
    SELECT
       machin ,
       count(IF(a = '1', 0)) AS manœuvre 1,
       ...............................................
    FROM table
    GROUP BY machin;

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

Discussions similaires

  1. Récupéré la valeur affichée dans tableau croisé
    Par stephanie dans le forum Formules
    Réponses: 1
    Dernier message: 07/11/2008, 15h52
  2. [BO 6.5] Afficher année civile dans tableau croisé
    Par karltom dans le forum Débuter
    Réponses: 3
    Dernier message: 21/07/2008, 12h28
  3. Ne pas toujours afficher un groupe dans tableau croisé
    Par leloup84 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 15/04/2008, 14h04
  4. [VBA-E] Colonne total dans tableau croisé dynamique
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2007, 19h24
  5. "4xa" pour l'année dans tableau croisé dynamique
    Par froutloops62 dans le forum Access
    Réponses: 7
    Dernier message: 20/12/2006, 01h05

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