Requete MySQL avec multi utilisateurs

Fermé
khivan Messages postés 3 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 15 avril 2013 - 14 avril 2013 à 23:13
 Utilisateur anonyme - 15 avril 2013 à 19:35
Bonjour à tous,

Je vous explique mon problème sur lequel je galère depuis pas mal d'heures.
Je réalise une appli web qui se doit d'afficher des événements entre deux utilisateurs.
J'ai une base de données avec une table 'events' et une table 'users' ainsi qu'une table lien 'events_users'

Je voudrais pouvoir récupérer en une seule requête une liste des events avec ses deux utilisateurs associés.

Dans ma table event j'ai id_event et nom_event.

Dans ma table users j'ai id_user et nom_user.

Dans ma table events_users j'ai à chaque fois une ligne qui faire correspondre l'id d'un utilisateur à l'id d'un event.

Le problème c'est que je ne peux pas récuperer en une seule ligne l'événement avec les deux noms d'utilisateurs car je fais appel à deux id_user ...

Une solution ?

Merci d'avance :)
A voir également:

4 réponses

Utilisateur anonyme
15 avril 2013 à 10:36
Bonjour

Il y a peut-être plus léger

SELECT u1.nom_user,u2.nom_user,e.nom_event FROM events_users eu1 JOIN events_users eu2 ON  (eu1.id_event=eu2.id_event AND eu2.id_user> eu1.id_user) JOIN  users u1 ON u1.id_user=eu1.id_user JOIN users u2 ON eu2.id_user=u2.id_user JOIN events e ON eu1.id_event=e.id_event


Cette requête te donne la liste de toutes les associations 2 personnes - événement.
Si c'est pour un cas particulier, Tu peux ajouter un WHERE ou mieux, ajouter des conditions dans les JOIN pour alléger le travail du serveur de BDD
1
khivan Messages postés 3 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 15 avril 2013
15 avril 2013 à 18:18
Waho, ça marche effectivement :)
Bon je vois que j'ai encore de nombreux progrès à faire en php/mysql car je n'utilisais que des WHERE pour mes conditions de requête. J'essaie de me renseigner un peu plus sur les JOIN et ON pour vraiment comprendre le fond de cette requête :).
Si j'ai bien compris, on créé deux 'instances' de la table users et events_users pour éviter un conflit et on met la condition que l'id_user 2 est différent (plus grand) que l'id_user 1 c'est ça ?

En tout cas, merci beaucoup du coup de pouce !
0
khivan Messages postés 3 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 15 avril 2013
Modifié par khivan le 15/04/2013 à 19:16
Petite chose qui me tracasse : lors du traitement des résultats de requêtes, je ne peux pas différencier les deux utilisateurs car les deux colonnes s'appellent toutes les deux 'nom_user' ... Comment les distinguer ?

Nevermind, résolu en utilisant 'u1.nom_user as user1' et 'u2.nom_user as user2'
0
Oui, je crois que tu as bien compris le principe quand tu parles de 2 'instances' entre guillemets.

La condition > (ou <, ce serait la même chose) sur les id_user sert à deux choses à la fois : à éviter d'avoir des résultats du type Pierre-Pierre et des doublons Pierre-Paul et Paul-Pierre

Pour distinguer les deux noms d'utilisateur, il faut utiliser des alias comme je l'ai fait pour les tables :

SELECT u1.nom_user nom_user1, u2.nom_user nom_user2, e.nom_event FROM events_users eu1 JOIN events_users eu2 ON  (eu1.id_event=eu2.id_event AND eu2.id_user> eu1.id_user) JOIN  users u1 ON u1.id_user=eu1.id_user JOIN users u2 ON eu2.id_user=u2.id_user JOIN events e ON eu1.id_event=e.id_event


La syntaxe complète pour les alias est d'ailleurs AS nom_user1 ... AS nom_user2 etc, mais le mot-clef AS est facultatif, et comme je suis fainéant...
0