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 :

Aide sur conception requête mysql et affichage php [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2017
    Messages : 7
    Par défaut Aide sur conception requête mysql et affichage php
    Bonjour,

    J'ai besoin d'un conseil pour extraire et structurer des données d'une base de données.

    Voici mon probleme
    J'ai la table "MEMBERS" structurée ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MEMBERS_ID int AI
    MEMBERS_USERNAME varchar 150 
    MEMBERS_EMAIL varchar 150 
    MEMBERS_PWD varchar 50 
    MEMBERS_IDSOCIETE int
    chaque membre effectue un des cours enregistrés de la table "LESSONS"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LESSONS_ID int AI
    LESSONS_NOM varchar50

    Pour chaque cours je dois enregistrer un temps que le membre a mis pour suivre le cours, donc la table "MEMBERS_ACTIVITY"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MEMBERS_ACTIVITY_ID int 
    MEMBERS_ACTIVITY_USERID int 
    MEMBERS_ACTIVITY_LESSONID int
    MEMBERS_ACTIVITY_ID_TOTALTIMEINSEC
    Un membre peut suivre plusieurs fois le cours, je dois l'enregistrer X fois.

    Pour le moment j'ai 4 cours, puisque je ne sais pas faire autrement j'ai bricolé en ajoutant a la table members 4 colones de plus, elle ressemble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MEMBERS_ID int AI
    MEMBERS_USERNAME varchar 150 
    MEMBERS_EMAIL varchar 150 
    MEMBERS_PWD varchar 50 
    MEMBERS_ACTIVITY-L1-TEMPS int 
    MEMBERS_ACTIVITY-L2-TEMPS int
    MEMBERS_ACTIVITY-L3-TEMPS int
    MEMBERS_ACTIVITY-L4-TEMPS int
    ca ne me plait pas du tout car si j'ajoute un nouveau cours il faut que j'ajoute une colone dans la base de données.
    En attendant la requette est assez simple pour obtenir un résultat en ligne pour l'afficher dans un tableau pour tout mes membres tel que ceci avec un simple select:
    MEMBERS_ID, MEMBERS_USERNAME, LESSONS_NOM 1, MEMBERS_ACTIVITY, LESSONS_NOM 2, MEMBERS_ACTIVITY-L2-TEMPS,LESSONS_NOM 3, MEMBERS_ACTIVITY-L3-TEMPS,LESSONS_NOM 4, MEMBERS_ACTIVITY-L4-TEMPS,

    Mais je vais pas pouvoir tricher ainsi trop longtemps car quand j'aurai 20 cours ou 100 cours ca va etre compliqué et pas propre.

    Du coup puisque je ne sais toujours pas faire la requette en une seule fois je l'ai faite en 3 temps. (Beurk)

    1er temps : je récupère le nombre de cours
    2eme temps : je récupère la liste des membres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MEMBERS_ID, MEMBERS_USERNAME FROM MEMBERS
    3eme temps : En PHP j'affiche mes résultats de mon 2eme temps et pour chaque ligne j'effetue une requette (imaginer si j'ai 100 000 membres ... c'est pourri en performances)
    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
    Select Sum(MEMBERS_ACTIVITY.MEMBERS_ACTIVITY_TOTALTIMEINSEC) As TEMPS,
      LESSONS.LESSONS_NOM,
      MEMBERS.MEMBERS_IDSOCIETE,
      MEMBERS_ACTIVITY.MEMBERS_ACTIVITY_USERID,
      MEMBERS_ACTIVITY.MEMBERS_ACTIVITY_LESSONID,
      LESSONS.LESSONS_ID,
      MEMBERS.MEMBERS_ID
    From
      MEMBERS_ACTIVITY Inner Join
      LESSONS
        On MEMBERS_ACTIVITY.MEMBERS_ACTIVITY_LESSONID = LESSONS.LESSONS_ID
      Inner Join
      MEMBERS
        On MEMBERS_ACTIVITY.MEMBERS_ACTIVITY_USERID = MEMBERS.MEMBERS_ID
    Where
      MEMBERS.MEMBERS_IDSOCIETE = :societeid And
      MEMBERS.MEMBERS_ID = :memberid
    Group By
      LESSONS.LESSONS_NOM, MEMBERS.MEMBERS_USERNAME, MEMBERS.MEMBERS_IDSOCIETE,
      MEMBERS_ACTIVITY.MEMBERS_ACTIVITY_USERID,
      MEMBERS_ACTIVITY.MEMBERS_ACTIVITY_LESSONID, LESSONS.LESSONS_ID,
      MEMBERS.MEMBERS_ID
    Je suis sur que l'on peut faire quelque chose de bien plus optimisé, et plus automatisé, c'est vraiment pas beau et très très lourd.

    Voici un jeu de données. la subtilité est sur la table MEMBERS_ACTIVITY ou il peut y avoir plusieurs enregistrement concernant un membre et la durée. Je dois ressortir le cumul temps.

    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
    MEMBERS 
    1 toto ***@*** motdepasse 3
    2 titi ***@*** passw1 3
     
    LESSONS
    1 anglais n1 
    2 anglais n2 
    3 allemand n1 
    4 allemand n2 
     
    MEMBERS_ACTIVITY
    1 1 67 
    1 1 77 
    1 1 188 
    1 2 221 
    1 2 111
    Mon niveau en SQL est trop faible. Malgré la lecture de cours et tutoriel, je n'arrive a rien.

    Merci de l'aide que vous pourrez m'apporter.

    Zory

  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
    Par défaut
    Pourquoi tu n'enregistres pas simplement une ligne dans la table MEMBERS_ACTIVITY pour chaque fois où le membre suit le cour ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2017
    Messages : 7
    Par défaut
    Bonsoir Sabotage,

    C'est exactement ce que je fais actuellement, a chaque cours suivis j'enregistre l'ID de cours (MEMBERS_ACTIVITY_LESSONID), l'ID de l'utilisateur (MEMBERS_ACTIVITY_USERID) et j'enregistre le temps passé (MEMBERS_ACTIVITY_ID_TOTALTIMEINSEC) ce que je ne sais pas faire c'est ressortir avec une requette toutes les informations nécéssaire pour faire un beau tableau...

    Merci de votre aide.

  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
    Par défaut
    Comme tu nous disais
    j'ai bricolé en ajoutant a la table members 4 colones de plus
    je ne te suis plus trop.

    Qu'est ce que tu souhaites afficher ?

    La requête que tu nous montres est correcte, tu peux simplement te passer de la boucle, d'autant que tu as déjà une jointure sur la table membre :

    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
    SELECT
    MEMBERS_ID, MEMBERS_USERNAME, MEMBERS_IDSOCIETE,
    MEMBERS_ACTIVITY_USERID,
    LESSONS_ID, LESSONS_NOM,
    SUM(MEMBERS_ACTIVITY_TOTALTIMEINSEC) AS TEMPS,
     
    FROM
      MEMBERS 
      JOIN MEMBERS_ACTIVITY ON MEMBERS_ACTIVITY_USERID = MEMBERS_ID
      JOIN LESSONS ON MEMBERS_ACTIVITY_LESSONID = LESSONS.LESSONS_ID
    WHERE
      MEMBERS.MEMBERS_IDSOCIETE = :societeid
    Group By
      MEMBERS_ID, MEMBERS_USERNAME, MEMBERS_IDSOCIETE,
      MEMBERS_ACTIVITY_USERID,
      LESSONS_ID, LESSONS_NOM
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Janvier 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2017
    Messages : 7
    Par défaut
    Je n'arrive pas a structurer mes données, la requette écrite ainsi me retourne :

    MEMBERS_ID, MEMBERS_USERNAME, MEMBERS_IDSOCIETE, MEMBERS_ACTIVITY_USERID, LESSONS_ID, LESSONS_NOM, TEMPS

    et du coup mes résultats sont affichés ainsi

    2, toto, 3, 2, anglais n2, 551
    2, toto, 3, 1, anglais n1, 423
    ...

    ce qui en soit contient toutes les données en effet mais je n'arrive pas a les organiser, je me fais pt'etre des nœuds au cerveau.

    J'essaie de faire une requette qui retourne les données d'un utilisateur sur une seule ligne tel que :

    2, toto, 3, anglais n2, 551, anglais n1, 423

    Il faut peut etre que j’arrête et simplement que j'organise les données dans mon code php plutôt que de vouloir trouver la requete miracle.

    Merci de votre aide.

    Mais ce n'est pt'etre pas possible.

  6. #6
    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
    Par défaut
    C'est en effet en PHP qu'il faut structurer l'affichage.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. [DEBUTANT] Besoin d'aide sur une requête Mysql
    Par Nerone21 dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/09/2008, 13h01
  2. besoin d'aide sur une requête mysql
    Par unmulot dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/07/2006, 13h17
  3. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29
  4. Aide sur une requête
    Par TshAw dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2005, 11h42
  5. Aide sur une requête (Group By...??)
    Par Cocolapin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2004, 10h26

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