我有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
(如果您的框架提供了这样的功能)