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 :

informations multiples d'une meme table


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut informations multiples d'une meme table
    J'accorde le fait que mon titre n'est point explicite, mais je trouvais pas les mots pour m'expliquer.
    J'ai un petit probleme, j'ai cherché avec google et les pages du forum mais soit je suis aveugle (ça m'etonnerai pas) soit je ne sais pas chercher (mais j'ai pas le terme exacte qui rend ma recherche plus difficile).
    Donc je vais essayer d'illustrer par un exemple :

    2 tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE `musique` (
      `id_musique` int(11) NOT NULL auto_increment,
      `album_musique` varchar(50) NOT NULL,
      `artiste_musique` varchar(50) NOT NULL,
      `lien_musique` varchar(100) NOT NULL,
      PRIMARY KEY  (`id_musique`),
    )
     
    CREATE TABLE `style` (
      `id_style` tinyint(4) NOT NULL auto_increment,
      `nom_style` varchar(50) NOT NULL,
      PRIMARY KEY  (`id_style`)
    )
    Mon but est de creer ensuite une page avec les albums de musique et les informations liées, néanmois j'aimerai aussi leur attribué un style de musique d'ou l'interet de la table style ou seront classés les styles (ex: rock jazz and co).
    Vous me direz suffit d'ajouter une clef composée de l'id du style dans la table musique et faire une jointure, mais j'aimerai que l'album ne soit pas composé que d'un seul style (par exemple certain album sont a la fois Jazz et a la fois Rock).

    Ainsi j'ai donc pensé a mettre 2 clefs qui respectivement contienderai l'id du style approprié. Par contre par cette methode je n'arrive pas a afficher sans passer par 2 connexions a la base de donnée.

    Est ce la bonne methode de faire 2 clefs ? ou n'ai je pas assez de connaissance sql (limité pour ma par) afin de pas reussir a afficher mon resultat ?

    J'espere que vous arriverez a me comprendre et merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    C'est ce qu'on appelle une relation "plusieurs à plusieurs". Elle se modélise en ajoutant une table, nommée par exemple, musique_style, qui contient les couples id_musique / id_style.

    Par exemple, si la musique 5 a les styles 8 et 12, cela donne ça sur la table musique_style :

    id_musique id_style
    ----------------------
    5 8
    5 12
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    ok merci, j'essayerai la requete apres manger (car manger c'est essentiel sinon je deviens aggressif si j'ai faim ... oups je divague ^^) mais grace a ton aide je visualise deja la requete.
    Cependant si ça coince je repasserai faire un tour

    merci

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    en fin de compte j'ai bien crée la table supplementaire musique_style.
    j'ai ecrit cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM musique_style INNER JOIN musique ON musique.id_musique=musique_style.id_musique INNER JOIN style ON style.id_style=musique_style.id_style
    mais je n'arrive pas a afficher le resultat sous la forme d'une seul ligne avec

    --------------------------------------------------------------------------
    |album_musique | artiste_musique | lien_musique | nom_style1 | nom_style2 |
    --------------------------------------------------------------------------

    le seul truc que j'arrive a faire c'est :

    -------------------------------------------------------------
    |album_musique | artiste_musique | lien_musique | nom_style1 |
    -------------------------------------------------------------
    |album_musique | artiste_musique | lien_musique | nom_style2 |
    -------------------------------------------------------------

    c'est peu etre un probleme de mon codage (php dans ce cas present) mais si vous avez une solution elle serai bienvenu

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Tu peux toujours faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT album_musique, artiste_musique, lien_musique,
      GROUP_CONCAT(nom_style ORDER BY nom_style SEPARATOR ' - ') as styles
    FROM musique_style 
      INNER JOIN musique ON musique.id_musique=musique_style.id_musique 
      INNER JOIN style ON style.id_style=musique_style.id_style
    GROUP BY album_musique, artiste_musique, lien_musique
    Si le résultat final est un tableau HTML, rien ne t'interdit d'utiliser '</td><td>' comme SEPARATOR.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    merci c'est exactement ça que je cherchais. le probleme venais que je ne connaissais pas la fonction GROUP_CONCAT maintenant que je connais je vais pouvoir reprendre mon projet qui etait en stagnation depuis 1 semaine

    Oui j'utiliserai un tableau donc je mettrai un td bien evidemment mais je voulais pas rentrer dans les details dans ma demande si je comprend avec un "-" je pourrai comprendre avec un td

    ps: aurais bien besion de s'acheter un bouquin sql ^^

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par *kilik*
    merci c'est exactement ça que je cherchais. le probleme venais que je ne connaissais pas la fonction GROUP_CONCAT maintenant que je connais je vais pouvoir reprendre mon projet qui etait en stagnation depuis 1 semaine
    Alors sache que c'est une fonction spécifique à MySQL, et qui manque cruellement aux autres SGBD .
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    ha mince moi qui voulais migrer sur Postgresql soon ça me donne deja moins envie

    et aussi je viens d'y penser, il y a une methode specifique pour l'insertion de donnée via un formulaire pour les relations "plusieurs à plusieurs" car dans l'immediat j'ai pas vraiment trouvé?

    Neanmois j'ai pensé pour le moment est d'utiliser la commande sur la table musique puis sur la table style.
    Recuperer la valeur de 'Auto_increment' qui me servira d'id pour la table musique_style.
    Mais je ne sais pas si c'est cette methode est optimisé ou pas ...

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par *kilik*
    et aussi je viens d'y penser, il y a une methode specifique pour l'insertion de donnée via un formulaire pour les relations "plusieurs à plusieurs" car dans l'immediat j'ai pas vraiment trouvé?
    oui...

    1/ tu insères dans la table musiques, et tu récupères l'ID générée automatiquement (mysql_insert_id en PHP, ou LAST_INSERT_ID en SQL).

    2/ tu insères dans la table styles, et tu récupères l'ID

    3/ tu ajoutes les deux ID dans styles_musiques

    Tout cela peut éventuellement se faire dans une proc stock MySQL, ou bien dans ton code PHP.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    ok je vais essayer ti suite merci bcp bcp bcp pour l'aide [j'ai edité un peu trop tard le message d'avant mais bon now j'ai votre aide je vais essayer ]

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    ok merci la c'est bon je crois que j'ai reelement fini avec mon probleme merci pour l'aide precieuse que vous m'avez apporté.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    En ce moment je rencontre bcp de difficultés la preuve je heurte encore sur cette requete.
    J'ai tout ecrit, l'insertation et l'affichage tout fonctionne ... mais j'aimerai pouvoir trier les musiques par exemple j'ai trois albums :

    Album1 Artiste1 Rock - Jazz
    Album2 Artiste2 Jazz - Blues
    Album3 Artiste3 Rock

    et j'aimerai afficher tout les albums qui contiennent au moins le style Rock :

    Album1 Artiste1 Rock - Jazz
    Album3 Artiste3 Rock

    J'ai deja testé divers requete, j'ai simplement arrivée a obtenir

    Album1 Artiste1 Rock *Le 2eme style disparait
    Album3 Artiste3 Rock

    Voila merci d'avance

  13. #13
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Il te faut deux instances de styles_musiques, l'une qui te sert à poser la condition sur 'Rock' (soit avec l'ID de Rock, soit avec une première instance de musiques), et l'autre qui te sert à récupérer l'ensemble des musiques (avec une seconde instance de musiques) dans un GROUP_CONCAT.

    Autre possibilité, sans doute plus lente, un truc du genre :

    SELECT Album, GROUP_CONCAT(styles)
    ...
    WHERE album IN (SELECT album qui contiennent 'rock')
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    oki mici bcp je crois que j'ai compris le principe je vais test dem1 soir

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

Discussions similaires

  1. Multiple Select d'une meme table
    Par DeWaRs dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/03/2012, 11h41
  2. 2 auto increment dans une meme table
    Par gesualda dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 12/10/2005, 09h31
  3. Association 1:n sur une meme table
    Par dafalcon dans le forum Décisions SGBD
    Réponses: 15
    Dernier message: 27/04/2005, 09h07
  4. pb intersection d'une meme table
    Par atog dans le forum Langage SQL
    Réponses: 16
    Dernier message: 06/01/2005, 17h03
  5. [debutant]Modelistation > plusieurs fk d'une meme table
    Par christophebmx dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 15/11/2004, 15h44

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