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

Requêtes MySQL Discussion :

Requête SQL mettre des ligne dans des colonnes


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Requête SQL mettre des ligne dans des colonnes
    Bonjour,

    je suis jeune étudiant en informatique et j'ai un sérieux problème.

    Pour être le plus claire possible je vais vous schématiser mon problème :

    j'ai deux tables users et profiles_users

    table users contient :
    id_users,nom

    table profiles users contient :
    id_users,profile

    exemple :

    table users:

    |1|toto|
    |2|tata|
    |3|titi |

    table profiles_users

    |1|p1|
    |1|p2|
    |1|p4|
    |2|p2|
    |3|p3|

    a la fin je voudrais avoir une table qui ressemble à :

    nouvelleTable :

    id_users|nom|profiles1|profiles2|profiles3|profiles4

    1|toto|p1|p2|0|P4
    2|tata|0|p2|0|0
    3|titi|0|0|p3|0

    les valeurs de profiles sont 1,2,3 ou 4.(juste ces 4 valeurs)
    les deux tables on le même id_users.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 67
    Points : 83
    Points
    83
    Par défaut
    La requête de sélection qui peut servir de base à "nourrir" ta table peut être la suivante :

    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
     
    SELECT
      users.id_users,
      users.nom,
      IF(SUM(IF(profiles_users.profile='p1',1,0))>0,'p1',0) AS p1,
      IF(SUM(IF(profiles_users.profile='p2',1,0))>0,'p2',0) AS p2,
      IF(SUM(IF(profiles_users.profile='p3',1,0))>0,'p3',0) AS p3,
      IF(SUM(IF(profiles_users.profile='p4',1,0))>0,'p4',0) AS p4
    FROM
      users
      INNER JOIN profile_users USING(id_users)
    GROUP BY
      users.id_users,
      users.nom
    ;
    Attention, pour que cela fonctionne, il est nécessaire que chaque user ait au moins un enregistrement connexe dans la table profile_users

  3. #3
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par NicoD. Voir le message
    La requête de sélection qui peut servir de base à "nourrir" ta table peut être la suivante :

    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
     
    SELECT
      users.id_users,
      users.nom,
      IF(SUM(IF(profiles_users.profile='p1',1,0))>0,'p1',0) AS p1,
      IF(SUM(IF(profiles_users.profile='p2',1,0))>0,'p2',0) AS p2,
      IF(SUM(IF(profiles_users.profile='p3',1,0))>0,'p3',0) AS p3,
      IF(SUM(IF(profiles_users.profile='p4',1,0))>0,'p4',0) AS p4
    FROM
      users
      INNER JOIN profile_users USING(id_users)
    GROUP BY
      users.id_users,
      users.nom
    ;
    Attention, pour que cela fonctionne, il est nécessaire que chaque user ait au moins un enregistrement connexe dans la table profile_users
    Avec un LEFT JOIN, on contournera ce problème.
    Par contre il faudrait être sûr que le jeu de profils se limite bien à p1, p2, p3 et p4.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

Discussions similaires

  1. [AC-2010] Concaténer des lignes dans des grosses requêtes
    Par docjo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/03/2014, 11h54
  2. [XL-2007] Ventiler des lignes dans des classeurs séparés
    Par Taltosm dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 17/09/2013, 17h44
  3. copier des lignes dans des feuilles designées
    Par arctica dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/09/2009, 13h14
  4. Détecter des lignes dans des champs
    Par afef_master dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 13/03/2009, 18h19
  5. Réponses: 13
    Dernier message: 31/08/2007, 13h53

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