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 :

Eviter de multiplier les requêtes


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Eviter de multiplier les requêtes
    Bonjour,

    Je suis sur MySQL 4.0.18-standard et je sèche depuis pas mal de temps sur une base biblographique.

    J’ai une table avec une liste de publications, une autre avec les noms des revues, une autre avec les auteurs et, enfin, une autre avec les relations auteurs_publications (les noms des tables sont en gras).

    Actuellement, je fais un SELECT sur la liste des publications avec un JOIN sur la table des noms de revues. Ensuite, pour chaque publication, je fais un SELECT sur la table auteurs_publications et un JOIN sur la table auteurs.

    Le résultat est bon mais cela engendre une requête supplémentaire par publication. Je me dis bien qu’il doit y avoir un moyen de faire ça avec un seul SELECT mais je n'y parviens pas. J'ai pourtant cherché dans plusieurs bouquins, forums etc.
    Je serai très reconnaissant si vous pouviez me guider un peu. Merci.

  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
    bah pourquoi tu ne mets pas tes 2 'join' dans la même requete?

  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 016
    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 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Je vois pas trop où est le problème . Il est possible de faire plusieurs jointures, donc une de publications vers revues, puis une de publications vers auteurs en passant par auteurs_publications...

    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
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses.

    J'ai fait quelques tests et il me semble qu'on a alors forcément les informations sur chaque publication qui se répètent x fois où x est le nombre d'auteurs de la publication (edit : j'y ai en partie répondu - c.f. edit ci-dessous).

    Exemple simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT nom, prenom, year, title, revue
     
    FROM publications 
     
    LEFT OUTER JOIN revues ON revues.id = publications.journal 
     
    LEFT OUTER JOIN auteurs_publications ON auteurs_publications.pub_id = publications.journal 
     
    LEFT OUTER JOIN auteurs ON auteurs.id_auteur = auteurs_publications.author
     
    WHERE publication.year = 2005
    Si on suppose que c'est la bonne approche (qu'en pensez-vous)?
    Alors comment, d'une part, trier les auteurs d'une publication et, ensuite, trier les publications d'une année selon le nom du premier auteur (à l'issue du premier tri)?

    Edit : OK. On peut faire un GROUP_CONCAT sur les noms pour éviter la multiplication des infos de publications mais je n'ai pas le niveau pour faire des opérations "complexes" dessus : e.g. créer automatiquement des liens si les auteurs sont des membres du site etc.

    Edit 2 : GROUP_CONCAT ne marche pas sur MySQL 4.0.18

    Je n'ai plus qu'à faire des boucles PHP
    On peut considérer le problème comme résolu.
    Merci en tous cas votre aide.

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

Discussions similaires

  1. Eviter les requêtes multiples
    Par Catalyst dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/07/2013, 15h17
  2. [FLV] Eviter de multiplier les fichiers .swf
    Par electroremy dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 02/04/2011, 15h48
  3. Réponses: 1
    Dernier message: 15/05/2008, 11h48
  4. Réponses: 44
    Dernier message: 14/03/2005, 09h43
  5. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23

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