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 :

Plusieurs LEFT JOIN avec un LIMIT pour chaque table ?


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Par défaut Plusieurs LEFT JOIN avec un LIMIT pour chaque table ?
    Bonjour,

    Tout d'abord je vous remercie pour le temps que vous prendrez pour m'éclaircir sur ma question,

    voilà, j'ai 5 tables sous mysql, la première table est la table principale table_profil
    les 4 autres sont liées à la première, table_voiture, table_moto, table_camion, table_avion

    dans chacune des tables j'ai des résultats correspondant à l'id du profil de la première table.

    j'ai une page du site dans laquelle j'aimerai afficher les 5 premiers résultats de chacune des tables correspondants a un id de la table_profil

    et pour cela j'aimerai envoyer une seule requetes à mysql

    j'utilise très régulièrement les jointures, mais là je coince un peu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM table_profil AS P 
    LEFT JOIN table_voiture AS V ON P.P_ID = V.V_P_ID
    LEFT JOIN table_moto AS M ON P.P_ID = M.M_P_ID
    LEFT JOIN table_camion AS C ON P.P_ID = C.C_P_ID
    LEFT JOIN table_avion AS A ON P.P_ID = A.A_P_ID

    et là je coince pour sortir 5 résultats pour chacune des tables et pas 10 de la première, 2 de la seconde etc...
    comme ça je peux afficher 5 résultats dans chacun des <div> de ma page et faire quelques chose de propre, et ainsi éviter 5 requetes à la base et la surcharger betement
    Je vous remercie d'avance pour l'éclaircissement, de votre expérience !

    Bon Dimanche.

  2. #2
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    La réponse va dépendre de si tu t'attends à avoir 5 lignes en retour ou 20 lignes.

    A priori, on va dire 20 lignes, vu que fonctionnellement il va être peut être difficile de lier les éléments voitures, moto & co entre eux. A part en disant les premiers entre eux, les second entre eux mais là on est plus sur de la cosmétique et ton application appelante pourra s'en charger s'en problème.

    Donc si tu veux 20 lignes, 5 par table, tu peux simplement faire des UNION ALL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    (SELECT 'voiture', P.P_ID, V.champ1, V.champ2 FROM table_profil AS P 
       LEFT JOIN table_voiture AS V ON P.P_ID = V.V_P_ID 
    ORDER BY ... LIMIT 5)
    UNION ALL 
    (SELECT 'moto', P.P_ID, M.champ1, M.champ2 FROM table_profil AS P 
       LEFT JOIN table_moto AS M ON P.P_ID = M.M_P_ID
    ORDER BY ... LIMIT 5)
    ...
    Le premier champ te permet facilement de t'y retrouver dans ton application appelante.

    Pour mettre tout sur 5 lignes, ça devient compliqué, il faut ajouter des rang par P_ID ce qui en MySQL n'est pas trivial et honnêtement je doute que tu y gagnes en perfs.

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 883
    Par défaut
    Salut seifscalp.

    Citation Envoyé par seifscalp
    j'ai une page du site dans laquelle j'aimerai afficher les 5 premiers résultats de chacune des tables correspondants a un id de la table_profil
    Si tu veux seulement afficher tes cinq premiers résultats à partir de la requête où tu fais une jointure, il suffit de rajouter à la fin de ta requête ceci :
    Ainsi tu auras seulement les 5 premières lignes de ta requête.

    Oui, mais comment avoir les cinq suivantes ?

    Le suffit de faire ceci :
    @+

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Par défaut
    Bonsoir,

    tout d'abord merci vous 2,

    @Drizzt : j'ai testé et pas totalement réussis à mettre en place ta solution, je pense la retester bientot et me semble la meilleure merci en tout cas !

    @Artemus24 : merci aussi pour ta réponse mais je pense que tu as pas lu attentivement ma question, la réponse que tu me donnes ne correspond pas à ma question, c'est bien trop simple .

    Bonne fêtes à vous !

Discussions similaires

  1. Requêtes avec plusieurs left Join créés dynamiquement
    Par bigbang84 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 24/10/2012, 17h06
  2. Left join avec plusieurs table & plusieurs champs
    Par jayfaze dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 16/12/2009, 15h01
  3. Requete avec limite pour chaque valeur du IN
    Par grunge0 dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/09/2009, 14h00
  4. count() dans *plusieurs* LEFT JOIN
    Par silver_dragoon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2004, 17h20
  5. LEFT JOIN avec Oracle 8i ne va pas... doit utiliser (+)
    Par loikiloik dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 16h38

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