Bonjour,
Dans une page je cherche à afficher les détails des sessions auxquelles participe l'utilisateur connecté (nom de la session, organisateur, date, lieu ...).
Toutes les infos sont dans plusieurs tables :
- events (id, name, plannerId, date, duration, town, country, place, numberMin, numberMax),
- eventsParticipants (eventId, participantId),
- users (id, pseudo, ...).
Ma première version marche bien :
Mais je voudrais pouvoir afficher pour chaque "[x] inscrits / [y] places disponibles".
Je pensais utilsier un COUNT pour avoir le nombre de participants en contant le nombre de participantId dans la table eventsParticipants pour chaque eventId :
Avec donc comme requête :
Mais j'obtiens un message d'erreur :
S'agit-il d'une erreur de raisonnement sur le COUNT ou d'une erreur de synthaxe de la requête ?
Merci d'avance.
Modifié par AlexP (22 Dec 2017 - 16:54)
Dans une page je cherche à afficher les détails des sessions auxquelles participe l'utilisateur connecté (nom de la session, organisateur, date, lieu ...).
Toutes les infos sont dans plusieurs tables :
- events (id, name, plannerId, date, duration, town, country, place, numberMin, numberMax),
- eventsParticipants (eventId, participantId),
- users (id, pseudo, ...).
Ma première version marche bien :
$events = $this->db->fetchAll('SELECT events.id, name, plannerId, date, duration, events.town, events.country, place, playersMax FROM events INNER JOIN users ON events.plannerId = users.id WHERE plannerId = ? ORDER BY date ASC', [$id]);
Mais je voudrais pouvoir afficher pour chaque "[x] inscrits / [y] places disponibles".
Je pensais utilsier un COUNT pour avoir le nombre de participants en contant le nombre de participantId dans la table eventsParticipants pour chaque eventId :
COUNT(participantId) as numberParticipants GROUP BY eventId
Avec donc comme requête :
$events = $this->db->fetchAll('SELECT events.id, name, plannerId, date, duration, events.town, events.country, place, playersMax, participantId, COUNT(participantId) as numberPlayers GROUP BY eventId FROM events INNER JOIN users ON events.plannerId = users.id INNER JOIN eventsParticipants ON events.id = eventsParticipants.eventId WHERE plannerId = ? ORDER BY date ASC', [$id]);
Mais j'obtiens un message d'erreur :
SyntaxErrorException
An exception occurred while executing 'SELECT events.id, name, plannerId, date, duration, events.town, events.country, place, playersMax, participantId, COUNT(participantId) as numberPlayers GROUP BY eventId FROM events INNER JOIN users ON events.plannerId = users.id INNER JOIN eventsParticipants ON events.id = eventsParticipants.eventId WHERE plannerId = ? ORDER BY date ASC' with params ["1"]:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY eventId FROM events INNER JOIN users ON events.plannerId = users.id INN' at line 1
S'agit-il d'une erreur de raisonnement sur le COUNT ou d'une erreur de synthaxe de la requête ?
Merci d'avance.
Modifié par AlexP (22 Dec 2017 - 16:54)