我去年创建了一个网站文件的分页,我从来没有真正再次使用它。
但是现在我需要在一个更大的应用程序中使用它,我担心它对于大量的mysql行不会表现得很好,我不知道。
我将发布一个示例,如果有人能告诉我是否真的需要升级代码,我会很高兴。
/* Connection file */
include( 'config.php' );
/* Get the amount of all rows */
$mqc = "SELECT COUNT(*) AS total FROM table";
$mqe = mysql_query( $mqc );
$mqn = mysql_fetch_array( $mqe );
$total = $mqn['total'];
/* Rows per page */
$perPage = 10;
/* Range for the pagination */
$range = 5;
/* Actual page */
$page = isset( $_GET['page'] ) &&
is_numeric( $_GET['page'] ) &&
!empty( $_GET['page'] ) ?
( (int)$_GET['page'] * $range ) : 0;
/* Query */
$mqc = "SELECT * FROM table
LIMIT " . $page . ", " . $perPage . " ";
$mqe = mysql_query( $mqc );
/* Show results */
while( $l = mysql_fetch_object( $mqe ) )
{
echo $l->id . ' - ' . $l->title . '<br />';
}
/* Function for pagination */
function pages( $total = false, $perPage = false, $page = false, $range = false )
{
/* Number of pages */
$totalPages = ( ceil( $total / $perPage ) ) - 1;
/* The range * 2 */
$range = $range;
/* The real param $_GET['page'] */
$realGetPage = !empty( $page ) ? ( $page / $range ) : 0;
/* Show the first page */
if($realGetPage >= 7)
{
echo ' <a href="?page=0"> 1 </a> ... ';
}
/* Loop to create the range */
for($i = ( $realGetPage - $range ); $i < ( $range + $realGetPage ); $i++)
{
/* Check out if the value isn't outta range */
if( $i > 0 && $i < $totalPages )
{
/* Highlight the actual page */
if( ( $i - 1 ) == $realGetPage )
{
echo ' [ <a href="?page=' . ( $i - 1 ) . '"> ' . $i . ' </a> ] ';
}
else
{
echo ' <a href="?page=' . ( $i - 1 ) . '"> ' . $i . ' </a> ';
}
}
/* Store the number of the last page */
$lastPage = ( $i + 1 );
}
/* Hack to show 5678910 */
if( $lastPage < ( $range * 2 ) + 1 )
{
for( $j = $lastPage; $j <= ( $range * 2 ); $j++ )
{
if( ($j - 1) == $realGetPage )
{
echo ' [ <a href="?page=' . ( $j - 1 ) . '"> ' . $j . ' </a> ] ';
}
else
{
echo ' <a href="?page=' . ( $j - 1 ) . '"> ' . $j . ' </a> ';
}
}
}
/* Last page */
echo ' ... <a href="?page=' . $totalPages . '"> ' . $totalPages . ' </a> ';
}
/* Show the pagination */
pages( $total, $perPage, $page, $range );
您怎么看?
答案 0 :(得分:2)
根据您在评论中提供的信息,您可能遇到的性能问题不会来自您的PHP脚本。如果您在巨大的表上执行多个INNER JOINS,这正是会影响您的性能的。需要注意的一些重要事项:
答案 1 :(得分:1)
我看到的主要内容是ORDER BY
条款。如果没有这个,您的分页结果(可能)是不可预测的。
添加ORDER BY
子句,并确保在可排序列上有适当的数据库索引。
我还建议使用预准备语句和绑定参数切换到更新的数据库连接库。请参阅PDO。