Mysql选择最后20行,带while循环

时间:2014-07-09 19:45:10

标签: php mysql

我有50多行,每个都有一个id,如何获取最后20条记录并用php显示每条信息。

使用循环是最好的方法吗?我想让它快速显示结果而不会错过任何行,这是一个循环最好的方式吗?

这是我的代码

$result = $mysqli_log->query("SELECT * FROM `$usern`");     
while( $row = $result->fetch_array() ) {
  $credit = $row['credit'];
  echo $credit;
}

3 个答案:

答案 0 :(得分:0)

要限制使用限制的查询数量,请按ID

对其进行排序
Select   *
From     `$usern`
Order By ID Desc
Limit 20

要按正向顺序翻转它们,您可以使用派生表

Select *
From (Select ID, Test
      From    test
      Order By ID Desc
      Limit 3) d 
Order By ID Asc

答案 1 :(得分:0)

正在执行的MySQL查询没有指定任何"顺序"到行; MySQL可以按照它选择的任何顺序自由地返回行,因此可能是#"最后20"一次运行查询的行可能与"最后20"第二次运行的行。

(我们确实观察到重新执行语句时的重复行为;它通常需要一些DML操作,添加索引或OPTIMIZE表语句来实际获得返回结果的更改...但是重点是,表中没有"最后20"行。在MySQL中,它只是一组行。)

要指定行的特定序列,请在查询中添加ORDER BY子句。假设您要使用唯一的id列来排序行,并且您想要最后20行,并且希望它们以递增的id序列返回:

SELECT t.*
  FROM ( SELECT u.* 
           FROM `$usern` u
          ORDER BY u.id DESC
          LIMIT 20
       ) t
 ORDER BY t.id

并且,是的,在循环中处理行""在PHP中,就像你演示的那样,是一种规范模式。

答案 2 :(得分:0)

如果您需要最新的20条记录,则必须ORDER DESC ID的结果集,然后LIMIT将结果设置为20条记录。 所以你可以 使用这样的东西:

$result = $mysqli_log->query("SELECT * FROM `$usern` ORDER BY `ID` DESC LIMIT 20");     
while( $row = $result->fetch_array() ) {
  $credit = $row['credit'];
  echo $credit;
}

如果您使用$row['credit']之类的关联键,另一个好方法是使用featch_assoc而不是featch_array(如果您的框架提供了这样的功能)