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 :

Select multiple sur la même table et renommage de champs


Sujet :

Requêtes MySQL

  1. #1
    Membre éprouvé
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Points : 1 277
    Points
    1 277
    Par défaut Select multiple sur la même table et renommage de champs
    Bonjour à toutes et à tous!

    J'ai actuellement un soucis, je voudrais vraiment éviter d'avoir à faire deux requêtes pour obtenir mon affichage et donc je voudrais avoir vos conseils.

    J'ai cette requête qui permet de sélectionner toutes les informations sur la catégorie enfant :
    Code SQL : 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
    SELECT
    downloads_card_name.dl_card_id, 
    downloads_card_name.dl_card_name, 
    downloads_card.dl_total_hit, 
    downloads_card.u_id, 
    downloads_category_name.dl_category_name, 
    downloads_category_name.dl_category_description, 
    downloads_category_name.dl_category_tag, 
    downloads_category.dl_category_id,
    downloads_category.dl_category_parent_id 
    FROM downloads_card
    LEFT JOIN downloads_card_name ON downloads_card.dl_card_id = downloads_card_name.dl_card_id
    LEFT JOIN downloads_category ON downloads_card.dl_category_id = downloads_category.dl_category_id
    LEFT JOIN downloads_category_name ON downloads_card.dl_category_id = downloads_category_name.dl_category_id
    WHERE dl_total_hit > 0 AND dl_card_lang = 'fr' AND dl_card_status = '1'
    ORDER BY dl_total_hit DESC LIMIT 0,$NbDl

    Et cette requête pour la catégorie parent qui se trouve dans la boucle de mon script :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT dl_category_name FROM downloads_category_name
    LEFT JOIN downloads_category ON downloads_category_name.dl_category_id = downloads_category.dl_category_id
    WHERE downloads_category_name.dl_category_id = :dl_category_parent_id

    Donc en gros je voudrais les fusionner pour n'avoir qu'une seule requête. Comment je peux faire?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($toBe || !$toBe) echo 'That is the question';

    Mes projets: DVP I/O

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Utilise des alias pour tes tables et préfixe les noms de colonnes avec ces alias.
    Tu verras que ta requête sera moins longue à écrire et plus lisible. Et comme ça tu peux mettre plusieurs instances de la même table dans la requête en utilisant plusieurs alias.

    Je ne suis pas sûr de l'ordre de tes jointures, ne connaissant pas la structure de ta BDD mais ça pourrait donner quelque chose dans le genre :
    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
    SELECT 
        crdn.dl_card_id, 
        crdn.dl_card_name, 
        crd.dl_total_hit, 
        crd.u_id, 
        catn.dl_category_name, 
        catn.dl_category_description, 
        catn.dl_category_tag, 
        cat.dl_category_id,
        cat.dl_category_parent_id 
        dcn.dl_category_name AS category_parent_name
    FROM downloads_card AS crd
    LEFT JOIN downloads_card_name AS crdn ON crd.dl_card_id = crdn.dl_card_id
    LEFT JOIN downloads_category AS cat ON crd.dl_category_id = cat.dl_category_id
        LEFT JOIN downloads_category AS dc ON dc.dl_category_id = cat.dl_category_parent_id
            LEFT JOIN downloads_category_name AS dcn ON dcn.dl_category_id = dc.dl_category_id
    LEFT JOIN downloads_category_name AS catn ON crd.dl_category_id = catn.dl_category_id
    WHERE dl_total_hit > 0 -- de quelles tables viennent ces colonnes ?
        AND dl_card_lang = 'fr' 
        AND dl_card_status = '1'
    ORDER BY dl_total_hit DESC 
    LIMIT 0, $NbDl
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éprouvé
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut,

    encore une fois tu me sauve la vie !

    Voici la requête je j'ai modifié pour que ça passe :
    Code sql : 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
     
    SELECT 
    	crdn.dl_card_id, 
    	crdn.dl_card_name, 
    	crd.dl_total_hit, 
    	crd.u_id, 
    	catn.dl_category_name, 
    	catn.dl_category_description, 
    	catn.dl_category_tag, 
    	child_cat.dl_category_id,
    	child_cat.dl_category_parent_id,
    	dcn.dl_category_name AS dl_category_parent_name
    FROM downloads_card AS crd
    LEFT JOIN downloads_card_name AS crdn ON crd.dl_card_id = crdn.dl_card_id
    LEFT JOIN downloads_category AS child_cat ON crd.dl_category_id = child_cat.dl_category_id
    LEFT JOIN downloads_category_name AS dc ON dc.dl_category_id = child_cat.dl_category_parent_id
    LEFT JOIN downloads_category_name AS dcn ON dcn.dl_category_id = dc.dl_category_id
    LEFT JOIN downloads_category_name AS catn ON crd.dl_category_id = catn.dl_category_id
    WHERE crd.dl_total_hit > 0
    	AND crdn.dl_card_lang = 'fr' 
    	AND crd.dl_card_status = '1'
    ORDER BY crd.dl_total_hit DESC 
    LIMIT 0, $NbDl

    Grâce a ton aide ça fonctionne et j'ai compris un peu plus de chose sur les alias

    Encore merci !
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($toBe || !$toBe) echo 'That is the question';

    Mes projets: DVP I/O

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

Discussions similaires

  1. Triggers BEFORE INSERT multiples sur la même table
    Par king_abdel dans le forum PL/SQL
    Réponses: 6
    Dernier message: 04/08/2010, 17h27
  2. [Doctrine] Jointure multiple sur la même table
    Par npolbos dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/05/2010, 16h31
  3. Jointures multiples sur une même table
    Par hjhjhj dans le forum Langage SQL
    Réponses: 10
    Dernier message: 08/05/2009, 16h48
  4. Accès multiple sur une même table
    Par ravaid dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/04/2008, 14h09
  5. Accès multiple sur une même table
    Par ravaid dans le forum Développement
    Réponses: 3
    Dernier message: 18/04/2008, 13h27

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