Récupération des ID utilisateur avec plusieurs rôles (1, 2 et 3)
Ce guide montre comment sélectionner efficacement des ID utilisateur uniques possédant les rôles 1, 2 et 3 dans un tableau avec des colonnes userid
et roleid
. Nous explorerons deux méthodes de requête SQL efficaces.
Méthode 1 : requête agrégée avec clause HAVING
Cette approche utilise l'agrégation et le filtrage :
<code class="language-sql">SELECT userid FROM userrole WHERE roleid IN (1, 2, 3) GROUP BY userid HAVING COUNT(*) = 3;</code>
La requête filtre les lignes où roleid
est 1, 2 ou 3. Elle regroupe ensuite les résultats par userid
et utilise HAVING COUNT(*) = 3
pour garantir que seuls les utilisateurs ayant les trois rôles sont inclus.
Méthode 2 : requête d'auto-JOIN
Alternativement, un auto-JOIN peut obtenir le même résultat :
<code class="language-sql">SELECT t1.userid FROM userrole t1 INNER JOIN userrole t2 ON t1.userid = t2.userid AND t2.roleid = 2 INNER JOIN userrole t3 ON t1.userid = t3.userid AND t3.roleid = 3 WHERE t1.roleid = 1;</code>
Cette requête joint la table userrole
à elle-même trois fois. Il garantit qu'un userid
a roleid
1, puis se joint pour trouver le même userid
avec roleid
2 et enfin roleid
3. Le INNER JOIN
garantit que seuls les utilisateurs avec les trois rôles sont renvoyés. Cette méthode pourrait être moins efficace que l'approche globale pour les très grandes tables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!