使用mysql进行高级查询:变量/子查询?

时间:2012-06-22 18:15:36

标签: php mysql sql variables

我想在收件箱中收到最新的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

为什么这不起作用?

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

1 个答案:

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

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