分组上的分页

时间:2013-10-19 10:37:59

标签: php mysql pagination

我的MySQL表中有一条记录,如:

ID Postcontent踵

1 A 2013-01-31

2 B 2013年1月31日

图3C二○一三年一月三十〇日

4 d二零一三年一月三十零日

5] E 2013年1月29日

6 F 2013年1月29日

我希望以类似

的方式展示它

2013年1月31日

A

2013年1月30日

C

d

2013年1月29日

电子

˚F

我能够像上面那样用group by显示,但是不能通过

在组中添加分页

如果有人可以帮助我如何在分组中添加分页。

2 个答案:

答案 0 :(得分:0)

你可以这样做:

while( $row = $query_prepared->fetch( PDO::FETCH_ASSOC ) )
{
    if( $date <> $row['postdate'] )
    {
        echo '<br>' ,$row['postdate'];
    }

    $date = $row['postdate'];

    echo '<br>' ,$row['Postcontent'];
}

并且不要将GROUP BY放在SQL中,而是使用ORDER BY postdate DESC或ASC。

以下是一个仅供理解的例子:

$testData = array
(
    array('1','A','2013-01-31'),
    array('2','B','2013-01-31'),
    array('3','C','2013-01-30'),
    array('4','D','2013-01-30'),
    array('5','E','2013-01-29'),
    array('6','F','2013-01-29')
);

$date = '';
foreach( $testData as $data )
{
    $row = array();
    list( $row['d'] ,$row['Postcontent'] ,$row['postdate'] ) = $data;

    if( $date <> $row['postdate'] )
    {
        echo '<br>' ,$row['postdate'];
    }

    $date = $row['postdate'];

    echo '<br>' ,$row['Postcontent'];
}

这将输出:

2013-01-31
A
B
2013-01-30
C
D
2013-01-29
E
F

答案 1 :(得分:0)

这个怎么样?

确保在(postdata,Postcontent)上建立索引后期或甚至索引以获得覆盖索引

请注意,有些人会认为这是错误的,因为您现在使用SQL格式化(HTML),但使用此方法可以获得更清晰的客户端代码

运行此查询..

SELECT
   postdate 
 , GROUP_CONCAT(Postcontent SEPARATOR '<br />') 'postcontent_formatted'

FROM 
 your_table

GROUP BY
  postdate DESC

PHP代码

<?php

     while( $row = $query_prepared->fetch( PDO::FETCH_ASSOC ) ) {
        echo $row['postdate'] . '<br />';
        echo $row['postcontent_html_formatted'] . '<br />';
     }

?>