2012-02-13 64 views
3

我试图执行其抓住所有具有给定用户名的行的mysql命令,按日期排序它们对它们进行排序,然后只返回第5MYSQL-抓住最后5行后日期

排序的命令是

ORDER BY date 

和命令来获得最后的5

WHERE ROWNUM <= 5 

的WHERE订单之前来了,所以这是倒退。所以我想我必须在mysql语句中有一个Mysql语句。

这是我的尝试。我得到一个别名错误,所以我添加了AS T1到命令。

SELECT * FROM 
(SELECT voting_id, caption_uid, voting_date, rating FROM voting 
    WHERE user_id = $inUserID AS T1 
    ORDER BY voting_date) 
WHERE ROWNUM <= 5 AS T2; 

任何想法?

回答

11

当您使用MySQL时,为什么不使用LIMIT子句,只保留前5个结果?

select * 
from your_table 
order by your_column 
limit 0, 5 


引用的the manual page for select一部分:

LIMIT该子句可以用于约束由SELECT语句返回的行 的数目。 LIMIT需要一个或两个数字 参数,它们必须都是非负整数常量(使用预准备语句时除外 )

使用两个参数, 第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。

+0

请注意,如果偏移量为0,也可以指定极限:“极限5”。事实上,这是更习惯于这样做的方式。 – 2012-02-13 05:51:58

+0

工程就像一个魅力,更干净。谢谢! – MintyAnt 2012-02-13 16:19:43

3

试试这个:

select voting_id, caption_uid, voting_date, rating from voting 
where user_id = $inUserID 
order by voting_date 
limit 5 

编辑:

你是否希望在第一个或最后5.如果您想应该是过去五年那么该命令还不清楚:

order by voting_date desc 
0

尝试此查询

Select columns from table_name where user_id =x order by dateField desc Limit 5 
0

我很迷惑你的头衔和你的问题主体。 您提到过最后5条记录。在你的问题的第一句话中,它是第一个5. 几个字后,又是最后5个。

如果你想获得过去5年,您也可以选择是否需要采取小于5个的总记录谨慎使用此

select * from table order by date limit (select count(*)-5 from table),5 

,您需要使用以下命令:

select * from table order by date limit (select case when count(*)>=5 then count(*)-5 else 0 end case from table),5 

如果您可以使用存储过程,则在第二个示例中,性能会更快。

declare @total; 
select @total = count(*) from `table`; 
case when @total<5 then 
@total=0; 
else //mysql require case/else 
end case; 
select * from `table` order by `date` limit @total, 5