J'ai des données qui ressemblent à ceci :
entities
id name
1 Apple
2 Orange
3 Banana
Périodiquement, un processus s'exécute et attribue une note à chaque entité. Le processus génère les données et les ajoute à un tableau de scores comme suit :
scores
id entity_id score date_added
1 1 10 1/2/09
2 2 10 1/2/09
3 1 15 1/3/09
4 2 10 1/03/09
5 1 15 1/4/09
6 2 15 1/4/09
7 3 22 1/4/09
Je souhaite pouvoir sélectionner toutes les entités ainsi que le score le plus récent enregistré pour chacune d'entre elles, ce qui permet d'obtenir des données comme celles-ci :
entities
id name score date_added
1 Apple 15 1/4/09
2 Orange 15 1/4/09
3 Banana 15 1/4/09
Je peux obtenir les données d'une seule entité à l'aide de cette requête :
SELECT entities.*,
scores.score,
scores.date_added
FROM entities
INNER JOIN scores
ON entities.id = scores.entity_id
WHERE entities.id = ?
ORDER BY scores.date_added DESC
LIMIT 1
Mais je ne sais pas comment sélectionner la même chose pour toutes les entités. Peut-être est-ce que cela me saute aux yeux ?
Merci beaucoup d'avoir pris le temps.
Merci pour ces excellentes réponses. Je vais laisser passer quelques jours pour voir si une solution préférée se dessine, puis je sélectionnerai la réponse.
MISE A JOUR : J'ai essayé plusieurs des solutions proposées, le principal problème auquel je suis confronté est que si une entité n'a pas encore de score généré, elle n'apparaît pas dans la liste.
À quoi ressemblerait le code SQL pour s'assurer que toutes les entités sont renvoyées, même si elles n'ont pas encore de score affiché ?
MISE À JOUR : Réponse sélectionnée. Merci à tous !