8791 sujets

Développement web côté serveur, CMS

Bonjour !

Alors, voici mon schéma de base de donnée.

upload/26689-shcema2.png

Et voici ma problématique.

Sachant qu'un projet est relié à un auteur et à un responsable de projet.
Sachant que bool_responsabilite prend la valeur 0 pour un auteur et la valeur 1 pour un responsable.

J'aimerais récupérer le nom du projet, le nom de l'auteur et le nom du responsable, en une seule requête (sous requêtes autorisées) et sur une seule ligne (pour éviter de faire une boucle).

Pour le moment, j'ai réussi à le faire avec un résultat sur 2 lignes :


SELECT Projet.nom_projet , Utilisateur.nom_utilisateur, bool_responsabilite
FROM Projet, Responsabilites, Utilisateur
WHERE Projet.id=xxx
AND Projet.id_projet=Responsabilites.id_projet
AND Responsabilites.id_utilisateur=Utilisateur.id_utilisateur 


Vous auriez une solution ? Smiley smile
Modifié par crevette (02 Feb 2010 - 11:23)
Hello crevette et bienvenue,

d'après ta description on dirait bien qu'un projet a toujours 1 et 1 seul auteur soit une cardinalité (1, 1) et 1 et 1 seul responsable soit une cardinalité (1, 1).

Auquel cas la table Responsabilites est inutile alors que la table Projet devrait avoir les champs :
id_projet
nom_projet
id_auteur
id_responsable

Ce qui règle également ta question. Smiley cligne
Avec ta structure actuelle, pourquoi ne pas essayer :

select p.nom_projet, r.nom_utilisateur as responsable, a.nom_utilisateur as auteur
gtom projets p
left join responsabilite z on p.id_projet = z.id_projet and z.responsabilite = 0
left join responsabilite w on p.id_projet = w.id_projet and w.responsabilite = 1
left join utilisateurs r on r.id_utilisateur = z.id_utilisateur
left join utilisateurs a on a.id_utilisateur = w.id_utilisateur
where p.id_projet = 123

mais bon, 4 jointures, ça commence à faire lourd...
Oups ... Désolé de ne pas avoir répondu, reparti dans mes codes comme je l'étais, j'ai totalement zappé mon post Smiley langue

Je tenterai tout cela ce soir Smiley smile

QuentinC : Quel est le problème d'avoir trop de jointure ? Ça alourdi les calculs ?
crevette a écrit :
QuentinC : Quel est le problème d'avoir trop de jointure ? Ça alourdi les calculs ?
Oui... mais surtout il s'agit de jointures sur les mêmes tables (en les renommant) ce qui montre qu'il y a soit un problème de normalisation, soit que la requête est "illogique" même si celle proposée par Quentin fonctionne. Smiley cligne
Modifié par Heyoan (23 Feb 2010 - 17:05)