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

Langage SQL Discussion :

Requete imbriquée - récuperation de donnees - Presentation


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete imbriquée - récuperation de donnees - Presentation
    Bonjour,

    Je recherche comment rediger ma requete afin de voir apparaitre en resultat quelque chose qui ressemble a cela :

    Resultat attendu :
    Menu1
    SousMenu11
    SousMenu12
    SousMenu13
    Menu2
    SousMenu21

    (avec le decalage)

    Voici le contexte :
    Je travaille avec Dreamweaver pour le formulaire ; ma requete me sert a alimente un List/menu d'un formulaire
    J'ai deux tables qui sont les suivantes :
    intervention_menu qui se compose de id ; menu (id etant la clef)
    intervention_sous_menu qui se compose de id ; s_menu ; id_menu (id etant la clef)
    Actuellement ma requete est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select s_menu from intervention_sous_menu group by id_menu, s_menu
    Elle affiche bien la liste des sous menu en groupant dabord par id_menu puis par s_menu mais il n'existe pas de decalage quelqu'un aurait il une idee, une remarque, un conseil SVP - Merci

    Raphaël

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 480
    Points
    28 480
    Par défaut
    Il s'agit là de cosmétique, qui n'est pas le but du langage SQL.
    C'est à l'application de se charger de la mise en forme des données.

  3. #3
    say
    say est déconnecté
    Membre éprouvé
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 258
    Points
    1 258
    Par défaut
    je dirais même plus...c'est une question à poser dans le forum PHP par exemple

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete
    Bonjour,

    Je suis d'accord il y a un cote mise en page mais il y a un cote programmation car actuellement ma requete ne m'affiche pas ce que je veux.

    Explication la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT s_menu FROM intervention_sous_menu GROUP BY id_menu, s_menu
    Ne m'affiche que :

    SousMenu11
    SousMenu12
    SousMenu13
    SousMenu21
    ...

    alors que je voudrais qu'elle affiche :

    Menu1
    SousMenu11
    SousMenu12
    SousMenu13
    Menu2
    SousMenu21

    Auriez vous une idée de modification a faire sur ma requete afin d'obtenir ce résultat ? SVP - Merci

    Raphaël

  5. #5
    say
    say est déconnecté
    Membre éprouvé
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 258
    Points
    1 258
    Par défaut
    alors, autant pour nous...pour ma part, je ne suis même pas allé jusqu'à lire la requête. tu semblais déjà présenter les résultats que tu obtiens...

    et je remarque que tu ne te sers que de la table sous-menu...en partant du principe que celle-ci ne contient que les sous menus...c'est simple tout logique.

    quelle est exactement la structure de ta table/base?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete
    Bonjour,

    Voici le contexte :

    Je travaille avec Dreamweaver pour le formulaire ; ma requete me sert a alimente un List/menu d'un formulaire.

    J'ai deux tables qui sont les suivantes :
    intervention_menu qui se compose de id ; menu (id etant la clef)
    intervention_sous_menu qui se compose de id ; s_menu ; id_menu (id etant la clef)

    Actuellement ma requete est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT s_menu FROM intervention_sous_menu GROUP BY id_menu, s_menu
    Elle ne m'affiche que :

    SousMenu11
    SousMenu12
    SousMenu13
    SousMenu21
    ...

    alors que je voudrais qu'elle affiche :

    Menu1
    SousMenu11
    SousMenu12
    SousMenu13
    Menu2
    SousMenu21

    Auriez vous une idée de modification a faire sur ma requete afin d'obtenir ce résultat ? SVP - Merci

    Raphaël

  7. #7
    say
    say est déconnecté
    Membre éprouvé
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 258
    Points
    1 258
    Par défaut
    quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT menu 
    FROM intervention_sous_menu 
    GROUP BY id, menu
    order by id, menu
     
    UNION
     
    SELECT s_menu 
    FROM intervention_sous_menu 
    GROUP BY id_menu, s_menu
    order by id_menu, s_menu
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select id, menu, s_menu
    FROM intervention_menu im 
    LEFT JOIN intervention_sous_menu ism on ism.id_menu = im.id
    group by id, menu, s_menu
    order by id, menu, s_menu
    ceci dit...pourquoi avoir 2 tables???
    une table autoréférencée me semble appropriée

    P.S : suis pas assez calé pour être sur de ma syntaxe sans la tester donc...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete (suite)
    Salut,

    Merci, je vais tester cela ce soir, je vous tiens au courrant.

    Quelqu'un a t il une autre solution ?

    C'est quoi une table autoreference ? Peux tu expliquer ? Un exemple ???

    SVP - Merci

    Raphaël

  9. #9
    say
    say est déconnecté
    Membre éprouvé
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 258
    Points
    1 258
    Par défaut
    pour moi le bon exemple, ce sont tes menus..

    un sous-menu appartient à un menu...non?

    tu aurais une table menu définie ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE t_menu
    (
      m_id integer,
      m_parent integer,
      m_label varchar(20),
      CONSTRAINT t_menu_pkey PRIMARY KEY (m_id),
        CONSTRAINT t_menu_m_parent_fkey FOREIGN KEY (m_parent)
          REFERENCES t_menu (p_uid) MATCH SIMPLE
          ON UPDATE CASCADE ON DELETE RESTRICT,
    )
    cela permettra de gérer la profondeur également

    P.S: syntaxe vite fait sous pgsql

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete
    Bonjour,

    Merci pour ta reponse mais pourrais tu encore plus la developper (expliquer, pourquoi creer cette table, comment, et comment l'utiliser, ...) ??? Cela interessera sans doute beaucoup de gens.

    Parce que moi je voudrais bien apprendre mais mon niveau est d'apres ce que je constate beaucoup mais beaucoup plus faible que le tien. chapeau bas

    Est ce applicable a ma requete si oui comment ?

    Oui un sous menu appartient a un menu ; mais attention par exemple deux menus pourrons avoir deux sous menus qui portent le meme nom mais qui devront etre identifiable de maniere differente, voir exemple :

    Exemple :
    Digestif
    Colon
    Foie
    Estomac
    Autres
    Vasculaire
    Aotre
    Artere
    Veine
    Autres

    les deux "autres" sont differents l'un est pour le digestif et l'autre pour le vasculaire !!!

    SVP - Merci

    Raphaël

  11. #11
    say
    say est déconnecté
    Membre éprouvé
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 258
    Points
    1 258
    Par défaut
    Citation Envoyé par Raphael39 Voir le message
    Est ce applicable a ma requete si oui comment ?

    Oui un sous menu appartient a un menu ; mais attention par exemple deux menus pourrons avoir deux sous menus qui portent le meme nom mais qui devront etre identifiable de maniere differente, voir exemple :
    à ta requête directement non...cela supposera de modifier la structure de ta table dans un premier temps.

    ce qui relie un sous menu au menu "parent" est l'id et non son nom...l'id est la clé primaire donc unique... aucune contrainte sur l'unicité du nom.

    Citation Envoyé par Raphael39 Voir le message
    Merci pour ta reponse mais pourrais tu encore plus la developper (expliquer, pourquoi creer cette table, comment, et comment l'utiliser, ...) ??? Cela interessera sans doute beaucoup de gens.
    euh...là tout de suite...je te renverrais carrément vers l'étape suivante :
    http://sqlpro.developpez.com/cours/arborescence/

    et ne saurais trop te recommander le merveilleux site de SQLPro

    quant au pourquoi..faut que je me rappelles

    EDIT : déjà...lorsque tu as des enregistrements de même nature/structure mais interdépendant (comme tes menus, des catégories, la représentation d'une hierarchie..)

    et notamment la rubrique auto-jointure

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete (Suite ....)
    Salut,

    Merci pour la reponse.

    Je test la requete proposee dans l'un des post et je vous tiens au courant.

    Je lis, analyse et tente de comprendre l'article propose par "Say" la semaine prochaine pendant mes repos et nous en reparlons, tranquillement.

    Merci encore

    raphaêl

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete (suite ...)
    Salut,

    de retour chez moi, j'ai teste les deux requêtes proposées par Say :

    Aucune des deux sembles fonctionner avec ma base de données Mysql et mon formulaire.

    Remarque sur ces deux requêtes (d'un néophyte) faut il pour la première laisser tous les retour a la ligne ?, pour les deux pourriez vous expliciter le fonctionnement des requêtes (que fait quoi dans chaqu'une d'entre elles) ?

    Voila ce que me dit PhpAdmin si je tente la requete 1 :

    Erreur

    requête SQL: Documentation

    SELECT menu
    FROM intervention_sous_menu
    GROUP BY id, menu
    ORDER BY id, menu
    UNION
    SELECT s_menu
    FROM intervention_sous_menu
    GROUP BY id_menu, s_menu
    ORDER BY id_menu, s_menu
    LIMIT 0 , 30

    MySQL a réponduocumentation
    #1221 - Incorrect usage of UNION and ORDER BY

    Voila ce que PhpAdmin me dit si j'utilise la 2eme requete :

    Erreur

    requête SQL: Documentation

    SELECT id, menu, s_menu
    FROM intervention_menu im
    LEFT JOIN intervention_sous_menu ism ON ism.id_menu = im.id
    GROUP BY id, menu, s_menu
    ORDER BY id, menu, s_menu
    LIMIT 0 , 30

    MySQL a réponduocumentation
    #1052 - Column 'id' in field list is ambiguous


    SVP Merci

    Raphaël

  14. #14
    say
    say est déconnecté
    Membre éprouvé
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 258
    Points
    1 258
    Par défaut
    1/ merci d'utiliser les balises code comme je l'avais fait : le bouton # de l'éditeur.

    2/ là, c'est tout simple, y'a qu'à lire les messages...un peu d'apprentissage du SQL me semblerait le bienvenu

    3a/
    le UNION sous mysql...à tester la syntaxe mais déjà il doit manquer le ; avant le union

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT menu
    FROM intervention_sous_menu
    GROUP BY id, menu
    ORDER BY id, menu;
    UNION
    SELECT s_menu
    FROM intervention_sous_menu
    GROUP BY id_menu, s_menu
    ORDER BY id_menu, s_menu
    3b/ si id est ambiguous c'est qu'un champ de même nom existe dans les deux tables..il me semblait pas dans ton explication...remplace id par interventions_menu.id.
    Il faut ici expliciter la table d'appartenance du champ

    @+

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete (suite)
    Salut,

    Merci de ton aide, je vais tester le code et essayer de le faire "avancer" si besoin je referais appel au forum.

    Merci

    Raphaël

Discussions similaires

  1. [requete] requete imbriquée
    Par karamazov994 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 18h54
  2. Requete imbriquée, oui mais...
    Par zax-tfh dans le forum Requêtes
    Réponses: 6
    Dernier message: 24/03/2005, 02h48
  3. Equivalent d'une requete imbriquée ??
    Par webtheque dans le forum Requêtes
    Réponses: 8
    Dernier message: 31/08/2004, 11h07
  4. Requetes imbriquées et jointures
    Par Emile Le Tueur* dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/04/2004, 00h12
  5. Requete imbriquée sur Firebird ou Interbase
    Par Thib dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 10h00

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