нумерация страниц в php - PullRequest
       17

нумерация страниц в php

1 голос
/ 14 января 2010

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

$query = "SELECT msg, user_id, comment_time FROM comments WHERE aid = '$aid' ORDER BY comment_time DESC";
        $result = mysql_query($query) or die("ERROR: $query.".mysql_error());
        if (mysql_num_rows($result) > 0) {
            while($row = mysql_fetch_object($result)){
                $uidval = $row->user_id;
                if ($uidval != 0){
                $userInfo = $facebook->api_client->fql_query("SELECT name, pic_square_with_logo, profile_url FROM user WHERE uid='".$uidval."'");

            //  echo '<br>Array Info<br>';
            //  print_r($userInfo);
            //  echo '<br><br>';

                $nameuser = $userInfo[0]['name'];
                $pic = $userInfo[0]['pic_square_with_logo'];
                $profile_url = $userInfo[0]['profile_url'];

                echo '<img src="'.$pic.'" />';
                echo '<a href="'.$profile_url.'">'.$nameuser.'</a>';
                echo '<br>';
                echo $row->comment_time;
                echo '<br>';
                echo $row->msg;
                echo '<br>';
                }

            }
        }

Ответы [ 4 ]

4 голосов
/ 14 января 2010

Решение лучше всего достигается с помощью предложений SQL limit / offset. Для MySQL это достигается добавлением LIMIT [offset] [count] к вашему запросу. PostgreSQL использует отдельный синтаксис select ... LIMIT [count] OFFSET [offset].

Идея состоит в том, чтобы ограничить количество возвращаемых результатов фактическим числом, которое вы хотите отобразить. Это может привести к значительному увеличению производительности, если вы отображаете страницу 1 из 200, с сотнями результатов на странице.

Конечно, вам нужно выполнить второй запрос - select count(*) from ..., чтобы определить количество результатов в наборе результатов. Разделите это на количество результатов на странице, и вы получите количество страниц.

Вероятно, вы захотите передать параметр страницы в строке запроса, например,

http://mysite.com/index.php?page=7

, а затем извлеките данные, используя аналогичный метод (рассмотрите этот псевдокод; я знаю, что на самом деле не запрашиваю правильно)

<?php

$num_per_page = 20; // 20 results per page

$page = isset($_GET['page']) ? $_GET['page'] : 0; // start from page 0

// Build our big query minus the SELECT part here
$from_part = 'tbl_results [where ...]"'

$num_results = query("SELECT COUNT(*) FROM $from_part");

// Use ceil to round upwards
$num_pages = ceil($num_results / $num_per_page);

// Cap the page a the last page
if ($page > $num_pages)
  $page = $num_pages;

// Cap the page at the first page
if ($page <= 1)
  $page = 1;

$offset = $page * $num_per_page;

// Build the final query to select the relevant page of data
$results = query("SELECT * FROM $from_part LIMIT $offset, $num_per_page");

?>
3 голосов
/ 14 января 2010

Это основной метод реализации нумерации страниц:

// Page number, >= 1, could come from $_GET for example
$page = 1;
// Amount of items to show on page
$perpage = 7;
// Calculate the index of first item to show,
// on page 1 we obviously want to start from 0, hence the - 1 part
$start = ($page - 1) * $perpage;
// Build the query using those variables
$query = "SELECT ... LIMIT $start, $perpage";

Вы, конечно, должны принять во внимание максимальное и минимальное количество страниц, проверив сначала количество элементов в таблице и отрегулировав переменную страницы и т. Д., Но это должно помочь вам начать.

0 голосов
/ 14 января 2010

Хотя научиться делать нумерацию страниц - это достойное начинание как новичок, я настоятельно рекомендую просто использовать код, который уже написан. Посмотрите PEAR, Zend Framework или любую другую коллекцию библиотек для реализации нумерации страниц.

Приведенные выше примеры дают хорошее объяснение того, как работает разбиение на страницы, но полностью игнорируют методы обеспечения безопасности, ремонтопригодность и другие факторы, которые влияют на производственный код качества. Я не оскорбляю вышеупомянутых комментаторов, я говорю, что у них нет времени, чтобы написать код качества продукции для вас, следовательно, не использовать их примеры (копировать, вставить).

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

Большинство из вышеупомянутых проблем в эти дни обрабатываются фреймворками (такими как KohanaPHP, Zend Framework, CakePHP и т. Д.).

0 голосов
/ 14 января 2010

Используйте LIMIT x, y, чтобы указать первую и количество записей, которые нужно извлечь как страницу.

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