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

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Création de colonnes Mysql dynamiques


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Membre régulier
    Création de colonnes Mysql dynamiques
    Bonjour tout le monde,
    Je suis entrain de réaliser une page en PHP qui consiste en la création de CV dynamiques.
    Je souhaiterais que la structure de ma table contienne des champs formations et diplômes.
    A priori, le nombre de formations et des diplômes n'est pas le même pour les différents employés.
    Est ce qu'il y a moyen avec une requête SQL, de créer des colonnes dynamiquement selon le nombre de diplômes ou de formations ?
    Merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Bonjour,

    Alors il faut créer 4 tables :
    • t_formations (id_formation, contenu_formation, ...)
    • t_user_formations (table de jointure, contenant : id_user et id_formation)
    • t_diplomes (id_diplome, contenu_diplome, ...)
    • t_user_diplomes (table de jointure, contenant : id_user et id_diplome)

    et dans t_users, supprimer les colonnes "formation" et "diplome".


  3. #3
    Membre régulier
    Merci pour le tuyau.
    Je commencerai à travailler avec ça et je referai un post si j'ai des difficultés avec le requêtes.

  4. #4
    Membre régulier
    J'ai juste une petite question.
    J'ai dèjà une table users où l'utilisateur est identifié avec son matricule.
    Est ce que ça marcherait si j'utilise 3 tables seulement :

    • users (id_user, matricule_user,...)
    • diplomes(id_diplome, contenu, matricule)
    • formations(id_formations, contenu, matricule)

  5. #5
    Invité
    Invité(e)
    Non.

    1- Les tables de jointure (t_user_formations, t_user_diplomes) sont nécessaires.

    C'est grâce à ces tables qu'on peut associer PLUSIEURS formations/diplômes à un user.

    2- Pour les requêtes, comme un user n'a pas forcément de diplome ni de formation, on utilisera LEFT JOIN (et PAS INNER JOIN).

    Exemples :
    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT U.id_user, U.user_nom, U.user_prenom, 
       D.id_diplome, D.contenu_diplome,
       F.id_formation, F.contenu_formation
       FROM t_users U
     
       LEFT JOIN t_user_diplomes UD ON UD.id_user = U.id_user 
       LEFT JOIN t_diplomes D ON D.id_diplome = UF.id_diplome
     
       LEFT JOIN t_user_formations UF ON UF.id_user = U.id_user 
       LEFT JOIN t_formations F ON F.id_formation = UF.id_formation


    Pour lister TOUS les diplômes d'un user en particulier (dont on connais l'id_user) :
    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT D.id_diplome, D.contenu_diplome
       FROM t_users U
     
       LEFT JOIN t_user_diplomes UD ON UD.id_user = U.id_user
       LEFT JOIN t_diplomes D ON D.id_diplome = UF.id_diplome
     
       WHERE U.id_user = :le_user_id


    N.B. Perso, j'ai pris l'habitude de préfixer les tables SQL avec "t_....." (ou tout autre préfixe spécifique) : ça facilite la lecture, et le débogage.

  6. #6
    Membre régulier
    Et pour les expériences, pour chacune il pourrait y'avoir plusieurs tâches.
    Je créerai donc, si j'ai bien compris encore 4 tables :
    t_expérience(id_experience, contenu)
    t_tache(id_tache, detail)
    t_global(id_experience, id_tache)
    t_user_experience(id_user, id_expeience)
    C'est ça?

  7. #7
    Invité
    Invité(e)
    Je ne sais pas ce que tu appelles "tache" ou "global".


    Ce qui est sûr, c'est qu'il faut bien réfléchir AVANT, pour bien concevoir les tables.

  8. #8
    Membre régulier
    Experience c'est l'espérience en question (" Fonction passée chez une société).
    Tache c'est les taches effectuées pendant cette expérience.
    Global ça serait la jointure entre ces 2 tables.
    user_experience ça serait la jointure entre l'expérience et les tâches

###raw>template_hook.ano_emploi###