2016-04-02 55 views
-2

有没有什么办法在不同的查询中从数据库中获取最新的,第二到最新的和第三到最新的记录?因为我想为每个查询使用我的滑块图像/内容。请告诉我,如果我的问题很混乱。从数据库中获取最新的,第二到最新的和第三到最新的记录

我知道有一种方法使用order by desc iddate, limit 3,但只有一个查询,我想知道是否有一种方法可以获取第二个到最新的和第三个到最新的记录。我知道最新的查询可以写成像order by desc iddate, limit 1,我只是不知道如何查询第二和第三到最新的记录。

+0

所以我的答案是否适合你?你是用另一种方式表达什么意思?在您要求我们寻求帮助之前,您尝试了什么?你得到的错误是什么? – androidnation

+0

如果我将获取最新的3条记录,你的答案将起作用。我用另一种方式的意思是用最新的记录,查询将会像'SELECT * FROM slider ORDER BY date DESC LIMIT 1'一样。但是当我想获得第二张最新唱片的时候,我不再有想法该怎么做。我尝试搜索,但我得到的是如何一次获取最新的3条记录,这不是我想要做的。 @androidnation – louie

+0

尝试获取数组中的所有行,然后使用索引获取第二个最后的 – androidnation

回答

1

以下是使用LIMITOFFSET的一种解决方案。

-- latest 
order by desc id/col_date desc limit 1 

-- 2nd to latect 
order by desc id/col_date desc limit 1,1 

-- 3rd to latect 
order by desc id/col_date desc limit 2,1 

演示:

mysql> select * from (select 1 as a union select 2 union select 3) t; 
+---+ 
| a | 
+---+ 
| 1 | 
| 2 | 
| 3 | 
+---+ 
3 rows in set (0.00 sec) 

mysql> select * from (select 1 as a union select 2 union select 3) t order by a desc limit 1; 
+---+ 
| a | 
+---+ 
| 3 | 
+---+ 
1 row in set (0.00 sec) 

mysql> select * from (select 1 as a union select 2 union select 3) t order by a desc limit 1,1; 
+---+ 
| a | 
+---+ 
| 2 | 
+---+ 
1 row in set (0.00 sec) 

mysql> select * from (select 1 as a union select 2 union select 3) t order by a desc limit 2,1; 
+---+ 
| a | 
+---+ 
| 1 | 
+---+ 
1 row in set (0.00 sec) 

参考:

http://dev.mysql.com/doc/refman/5.7/en/select.html

LIMIT子句可以被用来限制的行数由SELECT语句返回 。 LIMIT采用一个或两个数字参数 ,它们都必须是非负整数常量,这些例外都是 例外:

在预准备语句中,LIMIT参数可以使用? 占位符标记。

在存储的程序中,可以使用整数值例程参数或局部变量来指定LIMIT参数。

使用两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大数量的行数 。初始行的偏移量为0(不是1):

SELECT * FROM tbl LIMIT 5,10; #检索行6-15

+0

可以解释为什么1,1和2,1?对不起,我只是想知道为什么这样。 :) – louie

+0

哇,你是个天才!先生,谢谢你!非常感谢。并感谢您的参考! – louie

相关问题