Bonsoir,
Scénario:
j'ai un sujets, sur celui-ci j'ai plusieurs réponses, dont plusieurs d'un même utilisateur.
Question:
Comment faire que pour que $var1 possède la liste des mails sans doublon afin que je puisse envoyer un seul mail à tout le monde qui participe au sujet de mon forum?

4 réponses


William_LF
Réponse acceptée

Bonjour,

vu qu'on est dans la rubrique SQL, je pense que tu souhaites la réponse en SQL.

Voici un élément de réponse :

En supposant que tu est une table topic (qui contient les sujets) et une table com (qui contient les commentaires/réponses), tu pourrais faire une requête comme celle-ci :

SELECT 
    DISTINCT com.user_id AS id,
    user.email AS email,
    user.username AS user
FROM
    com
LEFT JOIN user
ON user.id = com.user_id
WHERE com.topic_id = 1

La requête vas rechercher tous les utilisateurs uniques qui ont commenté sur le sujet dont l'id est 1 (WHERE com.topic_id = 1 ).
Il suffit que tu remplaces le 1 par ta variable contenant l'id du topic.

La requête va te renvoyer une liste de ce format :

[id: 1, email: toto@me.com, user: toto],
    [id: 2, email: fred@house.net, user: fred],
    ...
]

Montre la requête que tu as essayé de faire

Hello, essayes ça :

SELECT 
    com.user_id AS id,
    user.email AS email,
    user.username AS user
FROM
    com
LEFT JOIN user
ON user.id = com.user_id
WHERE com.topic_id = 1
group by user.email

Au pire, tu dégages les doublons de ta base ;)

neocorp
Auteur

Le 'DISTINCT' étant une fonction fait pour, je vais plutôt utiliser celle-ci, mais merci quand même :D
cela donne donc:

$utilisateurs = DB::query(' SELECT 
  DISTINCT forum_messages.utilisateur_id AS id, utilisateurs.email AS email 
  FROM forum_messages 
  LEFT JOIN utilisateurs 
  ON utilisateurs.id = forum_messages.utilisateur_id 
  WHERE forum_messages.sujet_id = 5');
 foreach ($utilisateurs as $u) {
        echo $u->email.'</br>';}

C'est dommage, laravel possede deja une fonction distinct mais j'ai du mal à la comprendre pour réaliser la même opération.

$user = DB::table('users')->distinct()->get();

Merci à vous :D