2012-06-22 63 views
1

我想在收件箱中获取最新的5封邮件。 得到我需要使用这个5点最新的ID:使用mysql进行高级查询:变量/子查询?

​​3210

这返回正确的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 

为什么心不是这方面的工作?

这是数据库中的当前数据:http://i47.tinypic.com/2hpsjv9.png 我想在这种情况下返回行13和4.对不起,英语不好。

回答

1

针对子查询加入,而不是简单的自加入。 IN()子句将不起作用,因为LIMIT不能在IN()内使用。它应该在加入的子查询中工作:

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 

通过此方法,不需要变量。

+0

谢谢!有用 :) – medusa1414