8827 sujets

Développement web côté serveur, CMS

Bonjour à tous
J'ai une table Calendrier qui contient la description des évènements de mon association.
Chaque entrée de la table est référencée par un champ eventID
J'ai une autre table CalItems qui contient pour chaque évènement les actions à effectuer au cours d'un évènement, par exemple
Dans "Calendrier" l'évènement R20260901 contient la date, l'heure le lieu de l'évènement et quelques autres informations
Dans "CalItem" j'ai des entrées qui décrivent les actions de cet évènement sous la forme
eventID = R20260901, rank = 1, action n°1
eventID = R20260901, rank = 2, action n°2
eventID = R20260901, rank = 3, action n°3

Je cherche à obtenir pour chaque entrée du calendrier les informations contenus dans la table Calendrier plus un élément itemCount qui contient le nombre des actions à effectuer pour chaque évènement.
Mon SQL actuel:

SELECT DISTINCT
		c.eventID as id, `eventType`, ` `startTime`, `endTime`, `subject`, addressID` as locationID,
 COUNT(SELECT ci.rank FROM CalItems AS ci WHERE ci.eventID = c.eventID) AS itemCount
		FROM Calendar as c
		WHERE DATE(`startTime`) BETWEEN '2026-09-01' AND '2026-09-30'
		ORDER BY `startTime`
			;

Cette syntaxe est erronée mais je n'arrive pas à trouver la bonne syntaxe pour la ligne "COUNT...."
Merci de votre aide
Modifié par PapyJP (25 Aug 2026 - 10:22)
J'ai trouvé l'erreur

SELECT DISTINCT
  c.eventID as id, `eventType`, ` `startTime`, `endTime`, `subject`, addressID` as locationID,
  COUNT(ci.rank) AS itemCount
  FROM Calendar as c
  LEFT JOIN CalItems as ci
  ON ci.eventID = c.eventID
  WHERE DATE(`startTime`) BETWEEN '2026-09-01' AND '2026-09-30'
  GROUP BY c.eventID
  ORDER BY `startTime`
;

GROUP BY est une directive que je maîtrise mal.
Modifié par PapyJP (25 Aug 2026 - 11:11)