J'ai une table d'user dans mon application.
Id Name ParentId 1 User1 0 2 User2 1 3 User3 1 4 User4 2 5 User5 2
Les users ont une relation comme grandparent-> parent-> enfant. pour récupérer les users liés à un grand parent, j'utilise la requête suivante
select * from user where ParentId=1 or ParentId in(select id from user where ParentId=1)
ces users ont également plusieurs rôles dans ma table de rôles et pour récupérer le nombre de règles qu'un user possède, j'utilise select count(*) from group where userId=1
.
Id Role UserId 1 Role 1 1 2 Role 2 1 3 Role 3 2 4 Role 4 2 5 Role 5 3
J'ai besoin de récupérer ces deux données dans une seule requête. Je ne suis pas bon avec SQL et je sais que ma première requête n'est pas parfaite. Comment puis-je atteindre cet objective.
Votre requête doit simplement être jointe à votre table de rôles.
SELECT u.id, count(r.id) no_of_roles FROM user u left join roles r on u.id = r.userid WHERE u.ParentId=1 OR u.ParentId IN (SELECT id FROM t WHERE ParentId=1 ) group by u.id;