从多个到多个db关系中获取数据

use*_*826 7 mysql

我有一个表保存用户评论,我想检索每个用户发表的最后一条评论.

下面的查询应该让我知道我想要做什么

select comment, comment_id, userId FROM comments_table 
WHERE comment_id in (
   SELECT MAX(comment_id)
   FROM comments_table where userId in (2001, 2002, 2010)
   GROUP BY userId
)
Run Code Online (Sandbox Code Playgroud)

以上查询有效,但需要太长时间,特别是如果有很多userIds.

我需要一个更快的查询语句来完成同样的事情.

Zan*_*ien 9

使用连接而不是子查询:

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
Run Code Online (Sandbox Code Playgroud)

此查询中的子选择将只执行一次,而不是WHERE IN将对comments表中的每一行执行的子查询.