J'ai cette requête ( SQLFiddle ):
SELECT
c.name,
a.user_id,
a.status_id,
a.title,
a.rtime,
u.user_name,
s.status_name
FROM company c
LEFT JOIN action a ON a.company_id=c.id
LEFT JOIN user u ON u.id=a.user_id
LEFT JOIN status s ON s.id=a.status_id
WHERE u.user_name='Morgan'
-- WHERE c.name='Fiddle'
GROUP BY c.id
HAVING a.rtime IS NULL OR a.rtime = (
SELECT max(rtime)
FROM action a2
WHERE deleted IS NULL
AND a2.company_id = c.id
)
Problème 1
Je souhaite répertorier toutes les sociétés et afficher l'utilisateur et le statut de sa dernière action sur la société. En même temps, montrez aux entreprises où aucune action n'a été entreprise.
Problème 2
Je dois également pouvoir rechercher l'utilisateur par son nom, sélectionnant ainsi toutes les entreprises où cet utilisateur a eu la dernière activité. La requête est faite à partir d'un formulaire, donc je peux injecter des variables.
Je ne suis pas en mesure de modifier la base de données SCHEMA pour le moment, mais les conseils pour une future migration sont très appréciés.
J'ai essayé de le lier ensemble, INNER JOIN ( SELECT.. ) t ON
mais je ne peux pas m'en sortir.
J'ai également essayé des méthodes d' ici , ici et ici, mais je n'arrive pas à obtenir la bonne personne avec la dernière activité.
Version MySQL: 5.5.16. La table d'entreprise a environ 1 million de lignes et la table d'action est à 70K, en croissance. La performance est importante pour moi ici.
Comment résoudre ce problème?
MAX(Marks)
perTaskID
, vous voulezMAX(ActivityDate)
perCompany
.) Il n'y a pas beaucoup de différence si vous avez une table ou une jointure.