Как получить запрос для передачи на последующие страницы при разбиении на страницы результатов - PullRequest
1 голос
/ 18 марта 2011

Я просматривал все вопросы и ответы по нумерации страниц на сайте, и среди всех длинных кодов и ОО-решений этот код является одним из самых коротких и простых:

<?php  
// insert your mysql connection code here  
$perPage = 10; 
$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1; 
$startAt = $perPage * ($page - 1);  
$query = "SELECT COUNT(*) as total FROM table"; 
$r = mysql_fetch_assoc(mysql_query($query));  
$totalPages = ceil($r['total'] / $perPage);  
$links = ""; 
for ($i = 1; $i <= $totalPages; $i++) { $links .= ($i != $page )  ? "<a href='index.php?page=$i'>Page $i</a> " : "$page "; }   
$query = "SELECT * FROM table ORDER BY title LIMIT $startAt, $perPage";  
$r = mysql_query($query);  
// display results here the way you want  
echo $links; // show links to other pages 

Но я все еще не вижу, как сгенерировать запрос с обновленным LIMIT на последующих страницах.Ни одно из сообщений не проясняет это, и я продолжаю получать пустые вторые страницы независимо от того, какой код я пробую.Буду очень признателен, если кто-нибудь сможет объяснить, как получить результаты запроса на следующих страницах.

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Я думаю, что вы должны использовать токен OFFSET в своем запросе.Вот так:

$query = "SELECT * FROM table ORDER BY title LIMIT $perPage OFFSET $perPage * $page"; 

Надеюсь, это поможет.

0 голосов
/ 18 марта 2011

Не уверен, почему вам нужно каждый раз выбирать количество (*).Я бы предложил сделать это следующим образом:

<?php
/* establish the connection */
$mysqli = new mysqli (
            'localhost',  // The host to connect to
            'username',       // The user to connect as
            'password',   // The password to use
            'dbname');     // The default database to query

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s<br />\n", mysqli_connect_error());
    exit();
}

$perPage = 10;
$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
$startAt = $perPage * ($page - 1);

/* Send a query to the server */
if ($result = $mysqli->query(
     "SELECT * FROM table ORDER BY title limit $startAt, $perPage")) {
    $rowCnt = $result->num_rows;
    echo "<h3>Page: $page</h3>\n";

    /* Fetch the results of the query and show results*/
    while( $row = $result->fetch_assoc() ) {
        printf("%s - %s<br/>\n", $row['orderDate'], $row['orderDescription']);
    }

    /* Show next page, previous page links dynamically */
    echo "<p>\n";
    // generate previous page link if current page no is after 1st page
    if ($page > 1)
        printf("<a href='%s?page=%d'>Previous Page</a>&nbsp;&nbsp;&nbsp;\n", 
           $_SERVER["SCRIPT_NAME"], ($page-1));

    // generate next page link if we were able to fetch $perPage rows    
    if ($rowCnt == $perPage) 
        printf("<a href='%s?page=%d'>Next Page</a>\n", 
           $_SERVER["SCRIPT_NAME"], ($page+1));
    echo "</p>\n";

    /* Destroy the result set and free the memory used for it */
    $result->close();
}

/* close the connection */
$mysqli->close();
?>

Я использую новое расширение MySQL для PHP, вот справочная документация PHP MySQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...