我有50多行,每个都有一个id,如何获取最后20条记录并用php显示每条信息。
使用循环是最好的方法吗?我想让它快速显示结果而不会错过任何行,这是一个循环最好的方式吗?
这是我的代码
$result = $mysqli_log->query("SELECT * FROM `$usern`");
while( $row = $result->fetch_array() ) {
$credit = $row['credit'];
echo $credit;
}
答案 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
(如果您的框架提供了这样的功能)