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

MySQL Discussion :

Conseils structure tables


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Par défaut Conseils structure tables
    Bonjour à toutes et tous,

    Mon premier post sur ce forum, je débutte et dés lors je rencontre déjà des difficultés pour la structure à adopter pour mes bases.

    En gros voici ce que je désire faire:

    Créer une table 'articles' dans laquelle je stocke diverses informations sur des articles.

    Créer une table 'utilisateurs' avec des données relatives aux utilisateurs.

    Créer une table 'images' avec les images des articles.

    La relation entre ces tables est la suivante:

    Lorsque j'affiche la liste des articles, je recupere les diverses informations de ceux-ci dans la table 'articles' et en plus je dois récuperer quelques infos en provenance de la table 'utilisateurs' et aussi de la table 'images'.

    En effet, un article appartient à un utilisateur donné et peut avoir une ou plusieurs images qui lui sont propres.

    Mes questions:

    Quelle est la meilleure méthode pour ce genre de traitement?
    - Les sous-requêtes?
    - Les jointures?

    Merci d'avance pour vos conseils avisés, et n'hésitez pas à proposer d'autres options si les miennes ne sont pas adaptées.

  2. #2
    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 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour et bienvenue ,

    Les jointures sont faites pour ça.
    Le problème avec des sous-requêtes, mis à part le fait qu'elles complexifient grandement la syntaxe et la lisibilité des requêtes, est qu'elles altèrent les performances. Il faut donc, dès que c'est possible, les éviter au maximum en les remplaçant par des jointures.

    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

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Par défaut
    Bonjour à toutes et tous,

    Merci pour le conseil, c'est ce que j'avais compris lors de mes recherches d'infos.
    Je me suis donc lancé dans quelques tests malheureusement infructueux.
    Je joins ici un fichier .sql avec le structure de mes tables pour facilliter la compréhention.

    La dessus j'ai fait ceci mais j'obtiens 20 résultats alors que je devrai en obtenir 11 (le total des articles):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.art_name, a.art_detail, i.img_name
    FROM tbl_articles a, tbl_images i
    WHERE i.img_art_id = a.art_id
    LIMIT 0 , 30
    En gros ce que je veux c'est lister les differents articles (11 au total) mais en même temps afficher les images correspondantes à chaque article qui plus est, peuvent être plus au moins nombreuses selon l'article.

    La franchement, je suis perdu. Un petit coup de main serait super sympa.
    Fichiers attachés Fichiers attachés

  4. #4
    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 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Tout d'abord, il est préférable de prendre tout de suite de bonnes habitudes dans l'écriture des requêtes et donc d'utiliser une syntaxe normalisée pour les jointures (en utilisant INNER JOIN plutôt qu'en séparant les tables par des virgules). Ce qui donne plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.art_name, a.art_detail, i.img_name
    FROM tbl_articles a
    INNER JOIN tbl_images i ON i.img_art_id = a.art_id
    LIMIT 0 , 30
    Ensuite, le résultat obtenu est normal... Cette requête retourne toutes les images ainsi que les articles auxquels elles appartiennent. Ainsi, si un article n'a pas d'image, il n'apparaît pas dans la liste, et si un article a plusieurs images, il apparaît plusieurs fois.

    En gros ce que je veux c'est lister les differents articles (11 au total) mais en même temps afficher les images correspondantes à chaque article qui plus est, peuvent être plus au moins nombreuses selon l'article.
    Comme il doit nécessairement y avoir une ligne par image, l'article auquel appartient l'image est forcément répété sur chaque ligne... Donc un article à plusieurs images apparaît à chaque image. SQL renvoie les données comme suit :
    article1 | image11
    article1 | image12
    article2 | image21
    article3 | image31
    article3 | image32
    article3 | image33
    article5 | image51
    ...
    C'est ensuite au langage de programmation de transformer cette liste sous un autre format pour la mettre en forme, par exemple comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    article1  |  image11
              |  image12
    article2  |  image21
    article3  |  image31
              |  image32
              |  image33
    article5  |  image51
    ...
    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

Discussions similaires

  1. Conseil sur structure table
    Par Invité dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/12/2011, 08h14
  2. Réponses: 4
    Dernier message: 10/03/2009, 17h41
  3. [Conseils] Structure d'un XML de sérialization ?
    Par jbat dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 13/07/2006, 18h03
  4. Conseil utilisation table temporaire
    Par celine31 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 23/05/2005, 15h23
  5. [vb6] Modifier structure table Access sous VB6
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 25/03/2004, 17h45

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