【问题标题】:How to add pagination in PHP/SQL如何在 PHP/SQL 中添加分页
【发布时间】:2015-10-30 15:49:15
【问题描述】:
$query = "SELECT DISTINCT TITLE, PID, TYPE, SUM(DAYCOUNT) AS tot, ROUND(SUM(DAYCOUNT)/(
        SELECT SUM(DAYCOUNT) FROM REPORT_LIST_VIEW), 4) AS per
        FROM REPORT_LIST_VIEW
        WHERE DAYCOUNT > '0'
        GROUP BY TITLE, PID, TYPE
        ORDER BY TITLE ASC";
        $res = db_query($query) // drupal 7;

我正在使用 PHP 和 SQL (oracle) DB 来获取详细信息。任何人都可以分享详细信息以在我的页面中添加寻呼机,每页仅显示 10 个项目。

`function pager_array_splice($res, $limit = 9, $element = 0) {  
global $pager_page_array, $pager_total, $pager_total_items;
$page = isset($_GET['page']) ? $_GET['page'] : '';
// Convert comma-separated $page to an array, used by other functions.
$pager_page_array = explode(',', $page);
// We calculate the total of pages as ceil(items / limit).
$pager_total_items[$element] = count($res);  
$pager_total[$element] = ceil($pager_total_items[$element] / $limit);   
$pager_page_array[$element] = max(0, min((int)$pager_page_array[$element], ((int)$pager_total[$element]) - 1));  
return array_slice($res, $pager_page_array[$element] * $limit, $limit, TRUE);
}`

`$output = '';
$customArr = pager_array_splice($res, 100);
$output .= theme('views_mini_pager', array('quantity' => 100));
print $output;`

This how i tried for drupal method. But fails.

【问题讨论】:

标签: php sql oracle pagination


【解决方案1】:

MySQL

$query = "SELECT DISTINCT TITLE, PID, TYPE, SUM(DAYCOUNT) AS tot, ROUND(SUM(DAYCOUNT)/(
SELECT SUM(DAYCOUNT) FROM REPORT_LIST_VIEW), 4) AS per
FROM REPORT_LIST_VIEW
WHERE DAYCOUNT > '0'
GROUP BY TITLE, PID, TYPE
ORDER BY TITLE ASC
LIMIT $start, 10
";

现在将 $start 设置为 10 * $pageNo


示例: 上面的sql代码。 PHP代码:

// show activ page + 5 pages before active page and +5 after that page.
// all in all 11 page numbers:
$maxpagenumber = ...; // thats the tricky part. see below.
$activepage = (int)$_GET['page'];
$startWith = max($activepage-5,1);
$endsWith = min($activepage+5,$maxpagenumber);

// output
echo "first page | prev | ";
for($i=$startswith;$i<=$endsWith;$i++)
  echo $i." | ";
echo "next | last page";

您必须添加指向上述页面的链接。在每个链接中,您将参数page 附加到($i-1)

现在是 $maxpagenumber 的部分:您在 sql 语句中使用 SQL_CALC_FOUND_ROWS。

就是这样:)

【讨论】:

  • 谢谢 Joshua K。你能分享更多细节或详细代码吗?
  • 添加了更多代码。它应该是不言自明的
  • @JoshuaK OP 正在使用 Oracle,那么您为什么要发布 MySQL?此外,LIMIT 不是 Oracle 语法。
  • 添加了我有问题的代码。分享一些 PHP/SQL 知识,使其成为寻呼机。 1 of 20 &gt;&gt;....&lt;&lt; 15 of 20 &gt;&gt;...`
【解决方案2】:

Oracle Pre-12c 版本

您可以在 子查询 中使用 ROWNUM 作为 pagination query

例如,

SQL> SELECT empno, sal
  2  FROM   (SELECT empno, sal, ROWNUM AS rnum
  3          FROM   (SELECT empno, sal
  4                  FROM   emp
  5                  ORDER BY sal)
  6          WHERE ROWNUM <= 8)
  7  WHERE  rnum >= 5;

     EMPNO        SAL
---------- ----------
      7654       1250
      7934       1300
      7844       1500
      7499       1600

SQL>

Oracle 12c 版本

您可以使用 Top-n Row 限制功能。

例如,

SQL> SELECT empno, sal
  2  FROM   emp
  3  ORDER BY sal
  4  OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;

     EMPNO        SAL
---------- ----------
      7654       1250
      7934       1300
      7844       1500
      7499       1600

SQL>

【讨论】:

    猜你喜欢
    • 2015-12-20
    • 2014-12-14
    • 2018-02-13
    • 1970-01-01
    • 2017-09-03
    • 2011-09-20
    • 2011-07-09
    • 2017-11-04
    • 1970-01-01
    相关资源
    最近更新 更多