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 :

Requête multi table


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 76
    Par défaut Requête multi table
    Bien le bonjour les gens,
    Je viens à vous car j'ai besoin d'une requête interrogeant 7/8 tables différentes.
    Je pense que ma requête est bonne, mais ça charge un temps fou, je voulais donc savoir s'il y avait un moyen de l'optimiser. Et si elle est fausse, comment la corriger.

    Je vous explique :
    J'ai une table "hotel", je parcours les ids et récupère ceux qui sont dans 6 autres tables (de promotions) (pour savoir quel hôtel à telle ou telle promotion). Ensuite j'ai besoin de classer ces ids par région et destination et enfin par nom de l'hôtel.

    Quand je fais cette requête sur une table promo ça fonctionne impec, et quand je mets les autres plus rien ne fonctionne...

    Voila ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    SELECT 
    h.id_hotel,
    h.hotel_titre,
    r.titre, 
    de.titre
     
    FROM 
    hotel_promo_pourcent a,
    hotel_promo_chambre_prix b,
    hotel_promo_stay_x_pay_y c,
    hotel_promo_upgrade d,
    hotel_promo_enfant_gratuit e,
    hotel_promo_transfert_gratuit f,
    hotel h, 
    region r, 
    destination de
     
    WHERE 
    (h.id_hotel = a.id_hotel
    OR h.id_hotel = b.id_hotel
    OR h.id_hotel = c.id_hotel
    OR h.id_hotel = d.id_hotel
    OR h.id_hotel = e.id_hotel
    OR h.id_hotel = f.id_hotel)
    AND h.id_region = r.id_region 
    AND h.id_destination = de.id_destination
     
    ORDER BY 
    r.titre, de.titre, h.hotel_titre ASC
    J'espère ne pas avoir été trop confus, le projet est complexe ce n'est pas évident à expliquer aussi brièvement!

    Merci à vous!

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT mesChamps
    FROM tablePrincipal
    LEFT JOIN autreTable ON tablePrincipal.id = autreTable.id
    LEFT JOIN autreTable ON tablePrincipal.id = autreTable.id
    ...
    WHERE tables.idRegion = Region Demander
    ORDER BY tableHotel.nom ASC
    un truc dans le genre serai mieux je pense

    Les left join font tes jointures et met a null les champs non implémenter
    dans le where il te reste plus qu'a mettre ce que tu désire par exemple comparaison sur la région que tu désire

    Et le Order by te les ranges dans l'ordre que tu désire

  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 065
    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 065
    Par défaut
    En l'occurrence, pour trouver les ids qui sont dans les autres tables, il faut passer plutôt par INNER JOIN

    Quant à la première requête, s'il n'y a pas de condition WHERE, alors c'est un produit cartésien que tu fais sur toutes tes tables. Pas étonnant que ça prenne un temps monstrueux...

    En tout état de cause, il est préférable d'écrire correctement les jointures avec la syntaxe INNER JOIN ... ON...

    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
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    Ouai c'est sur mais le left join est utile si dans ta jointure tu as des champs NULL
    J'ai eu de mauvaises surprises avec INNER JOIN il n'y a pas longtemps

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 76
    Par défaut
    Merci pour les réponses! Je vais me pencher sur les jointures, je n'y comprend pas grand chose pour le moment, mais je vais voir ça

  6. #6
    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 065
    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 065
    Par défaut
    Citation Envoyé par jouana Voir le message
    Ouai c'est sur mais le left join est utile si dans ta jointure tu as des champs NULL
    J'ai eu de mauvaises surprises avec INNER JOIN il n'y a pas longtemps
    Dans le cas présent, on travaille sur des ID et sur des données communes aux différentes tables... Donc la jointure interne est celle à utiliser.

    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

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 76
    Par défaut
    Bon j'ai commencé le chantier et les noeuds aux cerveaux continuent.
    Pour appréhender inner join j'ai fait un petit test.

    Je veux lister l'id de mes hotels, plus la région et la destination qui lui sont liés.
    Faire un tableau du genre :

    1 | Océan Indien | Maldives
    2 | Océan Indien | Ile Maurice
    3 | Océan Indien | Seychelles
    ect...

    Mais avec ma requête il m'affiche les hôtels en double, triple et plus...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT h.id_hotel, r.titre, d.titre
    FROM hotel h
    INNER JOIN  region r ON h.id_region = r.id_region
    INNER JOIN  destination d ON r.id_region = d.id_region
    Est-elle bonne? Ou j'ai raté quelque chose?
    Merci!!!

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

Discussions similaires

  1. Requête multi-tables :S
    Par plutonium719 dans le forum Développement
    Réponses: 4
    Dernier message: 12/03/2008, 16h41
  2. modifier des données dans une requête multi table
    Par Bluman dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/02/2008, 10h00
  3. PB requête multi-tables
    Par duchnok dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/01/2008, 12h25
  4. Requête multi-tables avec BDE
    Par Ptit_bouchon dans le forum Bases de données
    Réponses: 9
    Dernier message: 03/01/2008, 12h58
  5. problème de requête multi-table
    Par dergips dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/07/2007, 18h21

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