J'ai une table qui détient des commentaires utilisateur et je souhaite récupérer le dernier commentaire effectué par chaque utilisateur.
La requête ci-dessous devrait vous donner une idée de ce que j'essaie de faire p> Quelque requeut fonctionne, mais prend trop longtemps, surtout s'il y a beaucoup d'userids. P> J'ai besoin d'une déclaration de requête plus rapide qui accomplit la même chose. P> P>
3 Réponses :
Utilisez une jointure au lieu d'une sous-requête:
SELECT
b.*
FROM
(
SELECT userid, MAX(comment_id) AS maxcomment
FROM comments_table
WHERE userid IN (2001, 2002, 2010)
GROUP BY userid
) a
INNER JOIN
comments_table b ON
a.userid = b.userid AND
a.maxcomment = b.comment_id
Que devrais-je ajouter à la requête ci-dessus s'il y a une autre table appelée user_details comme vous que je souhaite extraire également des colonnes u.mainImage et u.fullName peut-être utiliser b.user_id = u.user_id
Quelle table user_details code> connectez-vous? La table des commentaires? Table des utilisateurs?
User_Details Tableau Tableau principale est user_id et ceci est une clé étrangère dans les commentaires_table.
Essayez avec
select comment, comment_id, userId FROM comments_table WHERE userId in (2001, 2002, 2010) order by comment_id desc limit 1
Cela ne récupérera qu'une ligne: le dernier commentaire le plus récent de l'un des trois utilisateurs i>. Le O.P. demande le dernier commentaire de chacun i> b> des trois utilisateurs, ce qui signifie que vous devez effectuer un maximum de groupe pour les commentaires effectués par chaque utilisateur.
Gardons-le simples:
SELECT comment, MAX(comment_id), userId FROM comments_table WHERE userId IN (2001, 2002, 2010) GROUP BY userId;
Cette solution tirera le plus récent COMMENT_ID code> par userID code>, mais le champ code> ne sera pas dans la correspondance correcte avec le COMMENT_ID code>.