Fork me on GitHub

Rapport de message :*
 

Re: Récupère les adresses email par groupe !

Titre du sujet : Re: Récupère les adresses email par groupe !
par slider84 sur 16/02/2014 21:45:19

Petite astuce du jour en gardant le même exemple.

Cas concret rencontré cet aprés midi: Tester l'appartenance (pour tous les utilisateurs) à un ou plusieurs groupes afin de personnaliser les actions en fonction de ceux-ci. Généralement le principe est le suivant:
- On requête les utilisateurs (table users)
- Dans une boucle on teste l'appartenance de chaque utilisateur aux groupes (table groups_users_link) afin de personnaliser les actions.
> Si appartient groupe 1 alors xxx
> Si appartient groupe 2 alors yyy
> Si... etc.
- Fin de la boucle

Inconvénient de ce principe basique: On requête la table des groupes pour chaque utilisateur de la liste. Donc pour 1000 users, 1000 requêtes...

Il est cependant possible de remonter tous les groupes d'un utilisateur dans un champ dans la même requête:
SELECT t1.uid,t1.uname,t1.email,ugroups
FROM xxxx_users 
as t1 
LEFT JOIN 
(
SELECT t2.uid,
GROUP_CONCAT(t2.groupid order by t2.uid) AS ugroups
FROM xxxx_groups_users_link 
AS t2 
GROUP BY t2
.uid
)
AS 
ugroups
ON ugroups
.uid t1.uid

Le résultat obtenu en retour de cette requête est le suivant:
Open in new window
Donc une seule requête à la base de données quelque soit le nombre d'utilisateurs
Il est alors facile en php de récupérer les valeurs du champ ugroups (qui contient tous les groupes d'appartenance de l'utilisateur) dans un tableau avec la fonction "explode" et de les tester ensuite avec "in_array".
Je sais, je sais... je développe des trucs bizarres
PS: Les pseudos et adresses e-mail de l'impression écran sont totalement fantaisistes
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

80 Personne(s) en ligne (68 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 80 | Plus ...