Я недавно вернулся к PHP-кодированию, но застрял на чем-то с PHP Pagination, казалось, что все, что я пробовал, либо приводит к тому, что страницы не подсчитываются и отображаются на одной странице результатов, либо просто останавливаются на странице 6 и не идет дальше, я знаю, что с данными, которые хранятся в базе данных MySQL, он должен отображать 52 страницы результатов по 12 на страницу.

Так что мне нужна помощь, я думал, что это работает, пока я не добьюсь того, что не пойду дальше, чем страница 6 после ввода сотен записей в базу данных.

Код выглядит следующим образом

<?php
    //
    //How to print date
    //
    if($print_date == 1)
    {
        $print_date = '%d.%m.%Y';
    }
    elseif($print_date == 2)
    {
        $print_date = '%m.%d.%Y';
    }
    elseif($print_date == 3)
    {
        $print_date = '%W, %M %D %Y';
    }
    if (isset($_GET['pageno'])) {
        $pageno = $_GET['pageno'];
    } else {
        $pageno = 1;
    } // if

    $get_matches = mysql_query("SELECT 
        O.OpponentName AS hometeam, OP.OpponentName AS awayteam,
        LM.LeagueMatchHomeGoals AS goals_home,
        LM.LeagueMatchAwayGoals AS goals_away,
        LM.LeagueMatchID AS id,
        DATE_FORMAT(LM.LeagueMatchDate, '$print_date') AS date
        FROM tplls_leaguematches LM, tplls_opponents O, tplls_opponents OP
        WHERE O.OpponentID = LM.LeagueMatchHomeID AND
        OP.OpponentID = LM.LeagueMatchAwayID AND
        LeagueMatchSeasonID LIKE '$defaultseasonid'
        ORDER BY LM.LeagueMatchDate");

    $get_matches = @mysql_query($SQL) or die("Error Processing Fixtures");
    $query_data = mysql_fetch_row($get_matches);
    $numrows = $query_data[0];  
    $rows_per_page = 12;
    $lastpage      = ceil($numrows/$rows_per_page);
    $pageno = (int)$pageno;
    if ($pageno > $lastpage) {
        $pageno = $lastpage;
    } // if
    if ($pageno < 1) {
        $pageno = 1;
    } // if
    $limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;

    $get_matches2 = mysql_query("SELECT 
        O.OpponentName AS hometeam, OP.OpponentName AS awayteam,
        LM.LeagueMatchHomeGoals AS goals_home,
        LM.LeagueMatchAwayGoals AS goals_away,
        LM.LeagueMatchID AS id,
        DATE_FORMAT(LM.LeagueMatchDate, '$print_date') AS date
        FROM tplls_leaguematches LM, tplls_opponents O, tplls_opponents OP
        WHERE O.OpponentID = LM.LeagueMatchHomeID AND
        OP.OpponentID = LM.LeagueMatchAwayID AND
        LeagueMatchSeasonID LIKE '$defaultseasonid'
        ORDER BY LM.LeagueMatchDate, hometeam $limit",$connection)
        or die(mysql_error());
    while($row = mysql_fetch_array($get_matches2))
    {
?>

Что еще нужно добавить, если я возьму первый оператор SELECT, я получу тот же результат?

1
OuterHaven 30 Авг 2011 в 11:16

2 ответа

Лучший ответ

Попробуйте это. Это просто ваш код с небольшими изменениями.

<?php
    //
    //How to print date
    //
    switch ($print_date)
    {
    case 1:
        $print_date = '%d.%m.%Y';
        break;
    case 2:
        $print_date = '%m.%d.%Y';
        break;
        case 3:
        $print_date = '%W, %M %D %Y';
    }

    if (isset($_GET['pageno'])) {
        $pageno = $_GET['pageno'];
    } else {
        $pageno = 1;
    } // if

    $clause = "
        FROM tplls_leaguematches LM, tplls_opponents O, tplls_opponents OP
        WHERE O.OpponentID = LM.LeagueMatchHomeID AND
        OP.OpponentID = LM.LeagueMatchAwayID AND
        LeagueMatchSeasonID LIKE '$defaultseasonid'
        ORDER BY LM.LeagueMatchDate";

    $query = "SELECT COUNT(*) as num $clause";
    $result = @mysql_query($query) or trigger_error("SQL", E_USER_ERROR);
    $r = mysql_fetch_row($result);
    $numrows = $r[0];

    $rows_per_page = 12;
    $lastpage      = ceil($numrows/$rows_per_page);
    $pageno = (int)$pageno;
    if ($pageno > $lastpage) {
        $pageno = $lastpage;
    } // if
    if ($pageno < 1) {
        $pageno = 1;
    } // if
    $limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;

    $query = "SELECT 
        O.OpponentName AS hometeam, OP.OpponentName AS awayteam,
        LM.LeagueMatchHomeGoals AS goals_home,
        LM.LeagueMatchAwayGoals AS goals_away,
        LM.LeagueMatchID AS id,
        DATE_FORMAT(LM.LeagueMatchDate, '$print_date') AS date $clause $limit";

    $get_matches = mysql_query($query, $connection)
        or die(mysql_error());
    while($row = mysql_fetch_array($get_matches))
    {
?>

На самом деле это то, что предложил @g.salakirov, но в контексте всего кода, который вы предоставили. Я не тестировал его, но он должен работать. (Знаменитые последние слова .: D)

0
Herbert 30 Авг 2011 в 09:08

Вам нужно использовать mysql_num_rows (resource $ result), а не mysql_fetch_row (resource $ result), чтобы получить количество строк здесь:.

$get_matches = @mysql_query($SQL) or die("Error Processing Fixtures");
$query_data = mysql_fetch_row($get_matches);
$numrows = $query_data[0];  
$rows_per_page = 12;
$lastpage      = ceil($numrows/$rows_per_page);
$pageno = (int)$pageno;

В качестве альтернативы вы можете использовать запрос «count (*)» в начале, чтобы получить количество записей, что будет значительно быстрее.

Например:

  $get_matches = mysql_query("SELECT 
    count(*) as resultCount
    FROM tplls_leaguematches LM, tplls_opponents O, tplls_opponents OP
    WHERE O.OpponentID = LM.LeagueMatchHomeID AND
    OP.OpponentID = LM.LeagueMatchAwayID AND
    LeagueMatchSeasonID LIKE '$defaultseasonid'
    ORDER BY LM.LeagueMatchDate");
0
g.salakirov 30 Авг 2011 в 07:34