Je suis en train d'écrire une requête où je voudrais obtenir une liste des derniers « actions spéciales » des utilisateurs, j'ai donc ces tableaux:MySQL: Obtenir l'action la plus récente par ligne
table_users
id username email etc.
1 moloc [email protected] etc.
2 lilly [email protected] etc.
3 sammm [email protected] etc.
table_special_actions
id user_id action_id date
1 3 25 2010-11-01 22:51:56
2 3 37 2010-11-02 18:09:33
3 3 265 2010-11-03 07:20:12
table_actions
id action
1 Open a secret
2 Level up
3 Open magic door
etc. etc.
mon objectif est d'obtenir une liste d'utilisateurs où je n'ai que la dernière action spéciale pour chacun d'eux, donc j'ai pensé que quelque chose comme ceci:
SELECT *
FROM table_users AS users
LEFT JOIN (
SELECT user_id, action_id, MAX(date) AS action_date
FROM table_special_actions
GROUP BY user_id
ORDER BY action_date
) s_actions
ON s_actions.user_id = users.user_id
LEFT JOIN table_actions AS actions
ON s_actions.action_id = actions.id
cela ne fonctionne pas correctement, car il est de retour ceci:
-----users----- ------------s_actions------------ -----actions-----
id username action_id date action
3 sammm 25 2010-11-03 07:20:12 Action linked to action_id 25
Je l'ai attendu à obtenir ceci:
-----users----- ------------s_actions------------ -----actions-----
id username action_id date action
3 sammm 265 2010-11-03 07:20:12 Action linked to action_id 265
La chose étrange est le action_id, je reçois toujours la dernière date et c'est ok, mais je l'ai aussi toujours faire le poing action_id au lieu de celui par rapport à la ligne de date correcte.
Où est-ce que je me trompe?
changer action_id, max (date) à max (action_id) comme action_id, max (date) comme action_date et pls ne pas utiliser les mots réservés comme fieldnames - arghh –