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 :

Tableau multidimensionnel sous Joomla


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2012
    Messages : 22
    Par défaut Tableau multidimensionnel sous Joomla
    Bonjour à tous.

    Je souhaite réaliser un tableau multidimensionnel à partir de ma BDD, sous Joomla. Ce tableau sera en fait un planning mensuel pour des employés, avec leurs horaires.

    J'ai créé une table "vacations", avec les champs "vacation_date", "vacation_agent", "vacation_horaire_debut", "vacation_horaire_fin".

    Ma requête se présente sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php $db=JFactory::getDBO();
    	$query="SELECT * FROM #__cck_store_form_vacations";
    	$query.="  WHERE MONTH(vacation_date)='$mois' AND YEAR(vacation_date)='$annee' GROUP BY vacation_agent ";
    	$query.=" ORDER BY vacation_date ASC";
    	//print_r($query);
    	$db->setQuery($query);
    	$article = $db->loadObjectList();
    foreach($article as $field){...?>
    Les variables "$mois" et "$annee" sont issues du formulaire.

    Ma première interrogation est la suivante : j'ai lu que l'on ne pouvait grouper que suite à une agrégation... Qu'en pensez-vous ?
    Je souhaite obtenir le résultat suivant :
    La première ligne avec le nom des agents (chaque agent représentera une colonne), puis les lignes suivantes avec les dates du mois et les horaires, comme l'image suivante :



    N'étant pas un pro des boucles, si quelqu'un pouvez m'aider...

    Je vous remercie de votre attention et de votre aide.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Remarques sur ta requête :
    1) Il vaut mieux éviter la guerre des étoiles !

    2) Faire un GROUP BY sans fonction de groupage dans le SELECT ne rime à rien.

    Quant à la présentation des données telle que tu la souhaites, c'est le boulot du logiciel, pas du SGBD. Surtout que MySQL ne connait pas les requêtes récursives qui permettraient éventuellement de mettre en colonnes un nombre variable des agents.

    Tu peux cependant regarder cet article car j'ai l'impression que ce que tu cherches à faire s'en rapproche.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Expert confirmé

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Remarques sur ta requête :
    2) Faire un GROUP BY sans fonction de groupage dans le SELECT ne rime à rien.
    Ca c'est faux.
    Ca permet d'éviter les doublons
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Mais comme toutes les colonnes du SELECT ne figurant pas dans une fonction de groupage doivent figurer dans le GROUP BY sous peine de voir des résultats aléatoires dans celles qui ne le sont pas, raison pour laquelle les SGBD plus sérieux que MySQL refuseraient la requête de serval, c'est une fausse bonne idée de faire ça avec MySQL.
    Pour éviter les doublons, il faut utiliser DISTINCT.

    D'ailleurs, dans son cas précis, faire un GROUP BY sur l'agent ne lui donnerait qu'une vacation par agent, ce qui n'est pas ce qu'il cherche vu l'image du tableau qu'il souhaite obtenir. Le GROUP BY n'est pas du tout approprié ici.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Expert confirmé

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Par défaut
    C'est encore faux.

    J'utilise ce type de syntaxe sous SQL Server & Oracle

    Un DISTINCT s'applique sur toutes les colonnes du résultat.
    Comment fais-tu un distinct sur la première colonne de ton select uniquement ? Avec un group by
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par FirePrawn Voir le message
    C'est encore faux.

    J'utilise ce type de syntaxe sous SQL Server & Oracle
    Tu fais ce genre de requête sous SQL Server et Oracle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.col1, a.col2, b.col3
    FROM une_table a
    INNER JOIN une_autre_table b ON condition_de_jointure
    GROUP BY a.col1
    C'est interdit par la norme SQL et ça m'étonnerait fort que SQL Server ou Oracle te laissent faire !

    Dans sa table, si j'en ai bien compris la structure, il y a plusieurs lignes pour un agent. Le SGBD ne peut pas savoir, et n'a pas le droit de décider, quelles valeurs retourner pour les autres colonnes.

    Un DISTINCT s'applique sur toutes les colonnes du résultat.
    Comment fais-tu un distinct sur la première colonne de ton select uniquement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT a.col1
    FROM une_table a
    INNER JOIN une_autre_table b ON condition_de_jointure
    Si tu as besoin en plus d'une valeur de b, alors il faut spécifier la condition qui permet de déterminer laquelle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT a.col1
    FROM une_table a
    INNER JOIN une_autre_table b ON condition_de_jointure
    WHERE b.col2 = 'une_valeur'
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    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
    Mais comme toutes les colonnes du SELECT ne figurant pas dans une fonction de groupage doivent figurer dans le GROUP BY sous peine de voir des résultats aléatoires
    +1 CinePhil.

    Ca permet d'éviter les doublons
    y' a DISTINCT .

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2012
    Messages : 22
    Par défaut
    Bonjour à tous.

    Je vous remercie de vous intéresser à ma requête, mais je ne voudrais pas qu'elle soit à l'origine d'une discorde !

    Je vais essayer de faire comme l'article sur les tableaux croisés dynamiques, même si je doute y parvenir (mes connaissances en php sont très basiques). Je vous tiens au courant.

    Merci encore.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2005, 14h41
  2. Réponses: 2
    Dernier message: 27/11/2005, 23h36
  3. Nombre de dimensions d'un tableau multidimensionnel
    Par Bruno75 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/07/2005, 10h03
  4. type de donnée tableau multidimensionnel
    Par opheliegomes dans le forum Débuter
    Réponses: 2
    Dernier message: 03/02/2005, 12h29
  5. [langage] tableau multidimensionnel
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2002, 15h58

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