Bonjour à tous,
Je vais essayer de décrire mon probleme:
J'ai une table 'objets', qui possede deux colonnes : id et description.
J'ai une table users,qui possede aussi deux colonnes: id et name.
Enfin,j'ai une table historique, qui possede 4 colonnes: id_user, id_objet, type_action et date.
Cette derniere table va enfait enregistrer les actions des utilisateurs sur les objets, sachant qu'il y a différents types d'actions, représentés par des nombres.
Pour chaque action, on enregistre donc l'id de l'utilisateur,l'id de l'objet, la date et le type de l'action.
Je voudrais récupérer la liste de tous les objets, avec pour chaque objet, le nom de l'utilisateur qui a effectué l'action de type N sur cet objet.
Là ou ca se corse, c'est que l'action N peut avoir été effectuée plusieurs fois, et par des utilisateurs différents (je précise que l'action N a été effectuée au moins une fois), et je voudrais récupérer le premier utilisateur ayant effectué l'action (premier au sens temporel).
Voici mes différents essais:
Code :
SELECT o.id,o.description,h.date,u.name FROM objets AS o, INNER JOIN (SELECT id_user,id_objet FROM historique WHERE type_action=N) h ON h.id_objet=o.id INNER JOIN users AS u ON u.id=h.id_user
|
->Probleme: retourne des doublons quand plusieurs utilisateurs ont effectué l'action N sur un objet.
Pour corriger ce probleme de doublons, j'ai tenté un truc:
Code :
SELECT o.id,o.description,h.date,u.name FROM objets AS o, INNER JOIN (SELECT id_user,id_objet FROM historique WHERE type_action=N LIMIT 1) h ON h.id_objet=o.id INNER JOIN users AS u ON u.id=h.id_user
|
->Apres m'etre demandé pourquoi cette requete ne retournait rien, je me suis vite rendu compte que j'avais fait n'importe quoi avec mon "LIMIT", et que c'était normal.
En dernier recours, je suppose que je pourrais post-filtrer le resultat de la requete 1 avec PHP, mais l'idée ne me plait pas beacoup...
Je pense qu'il doit y avoir moyen de faire faire ca à mySQL, mais ca me dépasse un peu.
Des idées?
Merci et bonne journée
Message édité par Halike le 09-10-2007 à 12:39:09