PHP / MySQL分页与一个查询

时间:2010-07-15 08:38:30

标签: php mysql pagination

现在我的分页方式如下:

===============
首先,我进行常规查询,然后获得所有结果。

之后我计算结果,比方说300.我用num_results

执行此操作

现在我查看用户想要的页面和限制,比方说30,10。

最后我执行了新查询,并选择了限制。

===============

使用这种方法我做了几乎相同的查询两次,没有其他办法可以一次性完成。

2 个答案:

答案 0 :(得分:8)

是的,您可以将SQL_CALC_FOUND_ROWS用于此目的。

select SQL_CALC_FOUND_ROWS something from table limit 30,10

这样,在不使用limit子句时,您仍然可以获得通常检索的行数。

答案 1 :(得分:0)

我使用以下查询中的类似方法解决了该问题-您获得了限制x,y + 1,因此限制中有一个额外的项目,并使用array_slice对其进行了查询-如果为空,则没有其他项目。

 <?php
/*
CREATE TABLE test ( f1 varchar(23), f2 varchar(23) );
INSERT INTO test  VALUES( 'one','testfdsfsdf');
INSERT INTO test  VALUES( 'two','ssasfsdff');
INSERT INTO test  VALUES( 'three','wewefferwr');
INSERT INTO test  VALUES( 'four','wer3rtetet');
INSERT INTO test  VALUES( 'five','sdfsfsdffsdf');
INSERT INTO test  VALUES( 'six','sdasdadasd');
INSERT INTO test  VALUES( 'seven','testfdsfsdf');
INSERT INTO test  VALUES( 'eight','ssasfsdff');
INSERT INTO test  VALUES( 'nine','wewefferwr');

*/


$servername     = "localhost";
$username       = "root";
$password       = "";
$dbname         = "eztrades";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$start=2;
$items_per_page = 3;
$n=$items_per_page+1;
$sql = "SELECT * FROM  TEST LIMIT ".$start.','.$n;
$result = $conn->query($sql);
print_r( $result);

while( $r  = $result->fetch_assoc()) {
        print_r( $r);
        $last_item = array_slice( $r , $items_per_page +1, 1 );
}
echo 'LAST ITEM::::';
print_r( $last_item );
if(empty($last_item)) {
    echo 'NO MORE ITEMS';
}


?>