optimiser la requête sql

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;