去年,我为网站文件创建了一个分页,而我再也不需要真正使用它了。

但是现在我需要在更大的应用程序中使用它,而且恐怕它在大量的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 );


你怎么看?

最佳答案

我看到的主要内容是ORDER BY子句。如果没有此选项,您的分页结果将(可能)无法预测。

添加一个ORDER BY子句,并确保在可排序列上具有适当的数据库索引。

我还建议使用准备好的语句和绑定的参数切换到更新的数据库连接库。请参阅PDO

关于php - 升级PHP分页功能以更快地运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9866072/

10-10 00:46
查看更多