Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2011, 18h26   #1
Membre chevronné
 
Avatar de Julien Bodin
 
Homme Julien Bodin
Ingénieur développement logiciels
Inscription : février 2009
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Julien Bodin
Âge : 25
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 442
Points : 663
Points : 663
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 :
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 :
CentreInteret(ID, INTITULE, ID_CATEGORIE)

Et enfin j'ai des utilisateurs :

Code :
Utilisateur(ID, NOM, PRENOM)

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

Code :
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 :
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 :
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
Julien Bodin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 18h36   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 :
Citation:
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 :
Citation:
UTILISATEUR_CENTREINTERET(ID_CENTREINTERET, ID_UTILISATEUR)
C'est tellement plus simple !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h54.


 
 
 
 
Partenaires

Hébergement Web