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 :

Aide requete Join + table relationnelle


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Aide requete Join + table relationnelle
    Bonjour,

    Je bute (newbie) sur la requête suivante:

    J'ai une table shops:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE `shops` (
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(255) NOT NULL default '',
      `webpage` varchar(255) NOT NULL default '',
      `image` varchar(255) default NULL
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM CHARACTER SET `utf8`;
    une table brands:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE `brands` (
      `id` int(11) NOT NULL auto_increment,
      `brand_name` varchar(255) NOT NULL default '',
      `brand_image` varchar(255) default NULL,
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM CHARACTER SET `utf8`;
    et une table relationnelle (Il s'agit d'une relation many to many):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE `brands_shops` (
      `id_brands` int(11) NOT NULL default '0',
      `id_shops` int(11) NOT NULL default '0',
      PRIMARY KEY  (`id_marca`,`id_comercio`)
    ) TYPE=MyISAM CHARACTER SET `utf8`;
    Je voudrais en une seule requete pouvoir recuperer toutes les colonnes de shop, plus la colonne avec le nom des marques ("brand_name") correspondante au shop, mais je ne vois pas comment faire. Est-ce faisaible, ou dois-je le faire en plusieurs requêtes?

    D'autre part, je n'ai pas défini les clés externes. Conséquences?

    Merci, et longue vie au forum réinitialisé au 23 juillet!

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    as tu essayé quelque chose?
    ou bloques tu?

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 015
    Points : 23 704
    Points
    23 704
    Par défaut
    Bonjour,

    2 jointures suffiront :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT s.id, s.name, s.webpage, s.image, b.brand_name
    FROM shops s
    INNER JOIN brands_shops bs ON s.id = bs.id_shops
    INNER JOIN brands b ON bs.id_brands = b.id
    Pas besoin d'avoir défini les clefs étrangères (ce que tu ne pourrais de toute façon pas faire, vu que tes tables sont au format MyISAM).

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    merci ced pour la piste.

    le problème avec cette solution est que je recupere plusieurs lignes pour les shops qui ont plusieurs brands. exemple:

    3 EL HOGAR IDEAL NULL nike
    1 Kuba NULL lacoste
    3 EL HOGAR IDEAL NULL lacoste

    J'ai deux lignes differentes pour le shop 3 (El Hogar Ideal), car celui-ci a deux marques qui sont nike et lacoste.

    Y a-til un moyen d'obtenir une seule ligne par shop, mais avec les differentes marques?

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 015
    Points : 23 704
    Points
    23 704
    Par défaut
    Et non, le SQL n'est pas prévu pour ça... Le fait de tout passer sur une seule ligne, c'est à l'application de le faire.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    ok, c'est ce que je pensais malheureusement. Merci pour la confirmation .

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

Discussions similaires

  1. [AC-2003] Aide requete multi-tables
    Par chrtophe dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 03/07/2013, 21h07
  2. requete sur tables relationnelles
    Par redah75 dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/01/2013, 02h23
  3. Réponses: 5
    Dernier message: 03/09/2007, 13h52
  4. Aide pour une requete, deux table, un champ commun.
    Par Space Cowboy dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/03/2007, 10h59
  5. besoin d'aide -> requete sur 2 tables avec count()
    Par parksto dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/10/2005, 19h06

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