JOINTURE, LIMITATION...

Eléphanteau du PHP | 46 Messages

25 mai 2008, 09:56

Bonjour :D

Voila en gros j'ai 1 table "actions" qui contient les champs suivants :

- id (int, autoincrement)
- personne (int)
- date (datetime)
- action (int)

Cette table permet de stocker différents actions sur des personnes.

Je veux récupérer uniquement la dernière action de chaque personne...

Pour l'instant... je dois passer à côté de quelque chose... mais ca ne marche pas :cry:

d0m
Mammouth du PHP | 1141 Messages

25 mai 2008, 10:02

salut,

tu passes déjà à coté du code...
tu pourrais nous donner ce que tu as déjà fait?

Sinon au lieu de tater tout de suite, prends le temps d'écrire simplement en français ce que tu veux :

"je veux selectionner l'action
pour chaque personne
dont la date est la plus grande"


c'est à dire qu'il faut grouper toutes les actions par personne et chercher dans chaque groupe l'action avec la date la plus élevée.

Et justement pour cela il y a une clause sql : GROUP BY
Tu devrais chercher de ce coté

Eléphanteau du PHP | 46 Messages

25 mai 2008, 10:11

C'est quand même un peu plus compliqué qu'un GROUP BY !

Voici la requête nécessaire :

Code : Tout sélectionner

SELECT id, personne, date FROM actions AS A WHERE date IN (SELECT MAX(date) FROM actions AS B WHERE A.personne=B.personne) GROUP BY personne
Le petit "WHERE A.personne=B.personne" est assez important ;)

Mammouth du PHP | 19672 Messages

25 mai 2008, 12:03

J'ai pas testé, mais à mon avis tu pourrais simplifier comme ceci :

Code : Tout sélectionner

SELECT id, personne, MAX(date) AS date FROM actions AS A GROUP BY personne
Sans garantie, mais à priori je vois pas pourquoi ça marcherait pas aussi bien :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: