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

时间:2012-07-05 03:56:06

标签: 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
)

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

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

3 个答案:

答案 0 :(得分: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

此查询中的子选择只执行一次,而不是为注释表中的每一行执行的WHERE IN子查询。

答案 1 :(得分:0)

尝试

         select comment, comment_id, userId FROM          comments_table WHERE userId in (2001, 2002, 2010) order by comment_id desc limit 1

尝试查看此查询是否与您的查询等效  使用userid列上的索引,这应该执行的不仅仅是正确的

答案 2 :(得分:0)

让我们保持简单:

SELECT comment, MAX(comment_id), userId 
FROM comments_table 
WHERE userId IN (2001, 2002, 2010) 
GROUP BY userId;