2

我想在收件箱中获取最新的 5 条消息。要获得 5 个最新的 ID,我需要使用它:

SELECT
    MAX(id)
FROM 
    samtaler
WHERE 
    brukerid_mottaker = 1 
GROUP BY brukerid_avsender
ORDER BY id DESC
LIMIT 5

这将返回我需要的正确 ID。但是在同一个查询中,我想从同一个表中选择数据,即获得从上面这个查询返回的 id 的行。

我已经尝试了一些东西,变量和自加入,但没有运气:

select 
    p2.title, 
    p2.message,
    @a:=max(p1.id)
from 
    samtaler p1
    join samtaler p2
    on (@a = p2.id)
where
    p2.brukerid_mottaker = 1 
group by p2.brukerid_avsender
order by p2.id DESC
limit 5

为什么这不起作用?

这是数据库中的当前数据: 在这种情况下,我想返回第 13 行和第 4 行。抱歉英语不好。

4

1 回答 1

1

加入子查询,而不是简单的自联接。IN()子句不起作用,因为不能LIMITIN(). 它应该在连接的子查询中工作:

SELECT
  p1.title,
  p1.message,
  p2.id
FROM 
  samtaler p1
  JOIN (
    SELECT MAX(id) AS id
    FROM 
        samtaler
    WHERE 
        brukerid_mottaker = 1 
    GROUP BY brukerid_avsender
    ORDER BY id DESC
    LIMIT 5
  ) p2 ON p1.id = p2.id

通过这种方法,不需要变量。

于 2012-06-22T18:19:38.347 回答