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 :

Une seule requête au lieu de 2, possible ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut Une seule requête au lieu de 2, possible ?
    Bonjour à tous !

    Je stocke les centres d'intérêts d'un certain nombre d'utilisateurs.

    Pour celà j'ai une table CategorieCentreInteret qui permet de catégoriser les centres d'intérêts. Une catégorie peut en contenir d'autres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CategorieCentreInteret(ID, INTITULE, ID_PARENT)

    J'ai des centres d'intérêts qui ont pour parent une catégorie de centre d'intérêt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CentreInteret(ID, INTITULE, ID_CATEGORIE)

    Et enfin j'ai des utilisateurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Utilisateur(ID, NOM, PRENOM)

    Pour lier les utilisateurs et les centres d'intérêts :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UTILISATEUR_CENTREINTERET(ID_CENTREINTERET, ID_UTILISATEUR)

    Dans mon application actuellement j'ai besoin de deux requêtes pour :
    1) Afficher mes centres d'intérêts et mes catégories dans un arbre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select cci.id, cci.intitule, cci.id_parent, ci.id, ci.intitule, ci.id_categorie
    FROM categoriecentreinteret cci
    LEFT OUTER JOIN centreinteret ci ON ci.id_parent = cci.id

    2) Récupérer les centres d'intérêts de mon utilisateur et mettre en évidence dans l'arbre les centres d'intérêt qu'il a sélectionné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select ci.id
    FROM centreinteret ci
    INNER JOIN utilisateur_centreinteret uci ON uci.id_centreinteret = ci.id
    INNER JOIN utilisateur u ON uci.id_utilisateur = u.id
    Suite à cette dernière requête je croise les deux informations.

    Est-il possible de faire d'une pierre deux coups ? C'est à dire récupérer l'ensemble des centres d'intérêts avec leurs catégories et de "marquer" les enregistrements qu'un utilisateur x a choisi ?

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Oui c'est possible mais idéalement si vous pouviez illustrer par un jeu de test, la démonstration serait plus aisée.

    Un petit aparté, la modélisation des tables me paraît correcte, mais au niveau des noms de colonnes c'est plutôt raté, d'ailleurs vous vous embrouillez vous-même :
    CentreInteret(ID, INTITULE, ID_CATEGORIE)
    ...
    LEFT OUTER JOIN centreinteret ci ON ci.id_parent = cci.id
    Alors que finalement vous avez la bonne solution à portée de main :
    UTILISATEUR_CENTREINTERET(ID_CENTREINTERET, ID_UTILISATEUR)
    C'est tellement plus simple !

Discussions similaires

  1. Deux requêtes dans une seule requête, est-ce possible ?
    Par Stephane_br dans le forum Développement
    Réponses: 3
    Dernier message: 08/07/2011, 15h35
  2. [MySQL] Afficher les données dans un tableau html horizontal avec une seule requête au lieu de 6
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/10/2010, 11h13
  3. Réponses: 2
    Dernier message: 31/01/2009, 20h49
  4. Est-ce que c'est possible en une seule requête?
    Par geraldgg dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/12/2008, 18h44
  5. Une seule requête au lieu de cinq ?
    Par Klyne dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/10/2008, 12h58

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