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 :

table principale et tables satellites, quel schéma adopter ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 26
    Par défaut table principale et tables satellites, quel schéma adopter ?
    Bonjour,

    je me heurte à un problème de construction de tables, partant simple et courrant :

    J'ai une base mysql contenant :

    * une table offres
    * une table vehicules
    * une table options


    puis des tables faisant la liaisons entre la table offres et les autres :

    * une table liaisons_offres_vehicules
    * une table liaisons_offres_options


    j'ai organisé ma base ainsi parce qu'il peut y avoir plusieurs véhicules et options par offre.

    Maintenant je bloque au niveau de ma requete....

    J'aimerai avoir la liste de mes offres, les infos des véhicules et des options par offre en le moins de requetes possibles...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT o.* 
    FROM vehicules v 
    LEFT OUTER JOIN 
    liaisons_offres_vehicules lov 
    ON lov.id_vehicule = v.id 
    LEFT OUTER JOIN offres o 
    ON o.id = lov.id_offre 
    LEFT OUTER JOIN liaisons_offres_options loo 
    ON loo.id_offre = o.id 
    LEFT OUTER JOIN options op 
    ON loo.id_option = op.id 
    WHERE v.marque LIKE 'pigeot' 
    ORDER BY o.prix ASC

    Bien évidement, cette requete me retourne plus de lignes que d'offres...

    En gros, là je suis perdu.


    Donc : Comment feriez-vous pour que, pour chaque offre, vous ayez toutes les options et tous les véhicules ?

    Ce problème me parait assez classique .... quel schéma adopter ?

    Merci pour votre aide, bonne journée.
    Clem

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 142
    Par défaut
    Salut,

    il y a un truc que je comprends pas dans ta problématique, peut-il y avoir plusieurs offres par véhicule et/ou option ?
    Car s'il ne peut y avoir qu'une seule & unique offre par véhicule/option, alors pas la peine de recourir à des tables de liaisons...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 26
    Par défaut
    en fait, le problème est qu'il peut y avoir plusieurs options et véhicules par offre.

    Et qu'au moment de lister toutes les offres, je ne sais pas quelle solution choisir pour ramener toutes les offres, et tous les véhicules et options qui vont avec ...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Par défaut
    Bonsoir,

    Il me semble que les tables liaison_offres_xx sont de trop. Il suffit d'avoir un champ "offre" dans chacune des tables vehicules et options.
    On peut avoir plusieurs vehicules et options par offre mais chaque véhicule ou option ne se rapporte qu'à une seule offre (si je comprend bien).

    La jointure devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT o.* 
    FROM offres o
    LEFT OUTER JOIN 
    vehicules v
    ON v.id_offre = o.id 
    LEFT OUTER options opt
    ON opt.id_offre = o.id 
    WHERE v.marque LIKE 'pigeot' 
    ORDER BY o.prix ASC

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 26
    Par défaut
    Et non, un véhicule peut appartenir à plusieurs offres et les options aussi... d'où la création de cette table de liaisons.

    Finalement j'ai la solution d'aller chercher toutes les offres avec les options et les véhicules - ce qui peut me rapporter une 30aine de lignes par offre il faudra ensuite trier tout ça via php ...

    ou aller chercher toutes les offres, ensuite toutes les options, ensuite tous les véhicules puis toutes les liaisons enregistées dans les tables liaisons_offres_XXX et faire ma moulinette via php

    Cette deuxième solution ne me parait pas vraiment extensible.... le jour où je dois rajouter une table "couleur_vehicule" par exemple ....

    Donc est-ce que vous feriez comme la première solution : ramener 900 lignes quand il en faudrait que 30 et ensuite tout ranger dans des tableaux multidimensionnels ?

  6. #6
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Si ce que tu souhaites c'est avoir un résultat avec une seule ligne par offre, il te faut regrouper les véhicules dans un GROUP_CONCAT et les options dans un autre GROUP_CONCAT et faire un GROUP BY sur l'offre.
    Mais toutes les options d'une offre conernent-elles tous les véhicules de l'offre ?
    Si ce n'est pas le cas il manque l'identifiant du véhicule dans la table liaisons_offres_options.
    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)

  7. #7
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Salut,

    Il me semble que tu essaies d'appliquer une présentation personnalisée aux données, ce qui n'est en principe pas le rôle du SGBD.

    Cf http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L9

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

Discussions similaires

  1. [MySQL] Quel schéma de Table(s) pour système de commentaires
    Par guy2004 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 08/01/2013, 16h02
  2. Réponses: 11
    Dernier message: 20/11/2008, 18h08
  3. Quel schéma pour manipuler une table BD depuis un objet ?
    Par caesarvanou dans le forum Design Patterns
    Réponses: 2
    Dernier message: 19/12/2007, 09h29
  4. Réponses: 6
    Dernier message: 29/05/2006, 14h22
  5. Réponses: 3
    Dernier message: 02/05/2006, 21h36

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