现在我的分页方式如下:
===============
首先,我进行常规查询,然后获得所有结果。
之后我计算结果,比方说300.我用num_results
执行此操作现在我查看用户想要的页面和限制,比方说30,10。
最后我执行了新查询,并选择了限制。
===============
使用这种方法我做了几乎相同的查询两次,没有其他办法可以一次性完成。
答案 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';
}
?>