如何选择MySQL中的最后一行?

时间:2012-03-19 19:50:18

标签: php mysql

使用此代码我选择表格的前30行:

SELECT * FROM `table` LIMIT 0 , 30

但如何在不改变顺序的情况下选择最后30个?

7 个答案:

答案 0 :(得分:10)

看起来每个人都缺少这一部分:

  

但如何在不改变顺序的情况下选择最后30个?

首先,显然在提供的查询中没有顺序。假设订单在某个字段上升,这将是查询@DannyFox的意思:

SELECT * FROM T
ORDER BY val
LIMIT 0 , 30

现在假设我们已经简化了数据,例如a, b, c, d, e,我们只想要3行而不是30行:

SELECT * FROM T
ORDER BY val
LIMIT 3

如果在每行中返回a, b, c, d, e,那么他希望按此顺序获得c, d, e。每个人都提供的查询:

SELECT * FROM T
ORDER BY val desc
LIMIT 3

会返回e, d, c。这个问题是它实际上改变了原来的顺序,并且OP说他不想改变顺序。从技术上讲,导致c, d, e的查询是:

select * from (
  select * from t
  order by val desc
  limit 3
) s
order by val

实际上两次更改订单,恢复原始订单。

答案 1 :(得分:7)

由于您试图避免订购,因此解决方案是将其应用两次。

 SELECT * 
   FROM (
            SELECT * 
              FROM `table_name` 
          ORDER BY `column_name` DESC -- maybe id?
             LIMIT 0, 30
         ) `table_aliase`
ORDER BY `column_name` ASC

答案 2 :(得分:4)

首先,您需要指定订单:

SELECT * FROM table
ORDER BY some_id ASC -- ascending order
LIMIT 30

如果该查询返回前30列,则此列将返回最后30列:

SELECT * FROM table
ORDER BY some_id DESC -- descending order
LIMIT 30

答案 3 :(得分:3)

如果您有自动增量键/列,请说id,这是一个示例

SELECT * FROM `table` ORDER BY id DESC LIMIT 0 , 30;

答案 4 :(得分:1)

也许这会奏效:select * from table WHERE id > ((SELECT MAX(id) from table) - 30);

答案 5 :(得分:0)

没有关于订单的说法,因此您不能使用ORDER BY。 有一种方法可以从给定的点获取记录,但为此您需要知道有多少记录,然后使用此计数值来提供限制

SELECT COUNT(*) AS counted FROM table

SELECT * FROM table LIMIT (counted-30),30

答案 6 :(得分:0)

这是我用于PHP的方法:

$query = "SELECT * FROM table ORDER BY id DESC LIMIT 3";
$res = mysql_query($query);
$results = array();
while($row = mysql_fetch_assoc($res)){
     $results = $row[field];
}
// Back to original order based from DB
$results = array_reverse(results);