Requete MySQL avec multi utilisateurs
khivan
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
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 :)
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:
- Requete MySQL avec multi utilisateurs
- Youtube multi downloader - Télécharger - Conversion & Codecs
- Mysql community server - Télécharger - Bases de données
- Sfr multi - Accueil - Opérateurs & Forfaits
- Multi boot windows - Guide
- Multi exp pokemon heartgold - Forum Pokémon
4 réponses
Bonjour
Il y a peut-être plus léger
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
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
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 !
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 !
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'
Nevermind, résolu en utilisant 'u1.nom_user as user1' et 'u2.nom_user as user2'
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 :
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...
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...