Mysql选择最后20行,使用while循环


Mysql select last 20 rows, with while loop

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

使用循环的最佳方式是什么?我想让它快速显示结果,不漏掉任何行,那么循环是最好的方法吗?

这是我的代码

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

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

(当语句被重新执行时,我们确实观察到重复的行为;它通常需要一些DML操作,添加索引或优化表语句,以实际更改返回的结果……但关键是,表中没有"最后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中"循环"处理行,就像您演示的那样,是一个规范的模式。

要限制查询的数量,请使用limit并按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

如果您需要最新的20条记录,您必须将ID设置的结果ORDER DESC,然后将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(如果您的框架提供了这样的功能)