我有一个非常大的SQL数据集,我需要分页。
我的分页代码存在问题。代码确实在网址中显示网页编号,确实会在表格底部给我分页超链接。但是,我点击的任何页面,它输出sql数据表的相同的确切部分。
另外,我在wordpress中这样做。
// define how many results you want per page
$results_per_page = 10;
// find out the number of results stored in database
$sql='SELECT * FROM ETF';
$result = mysqli_query($con, $sql);
$number_of_results = mysqli_num_rows($result);
// determine number of total pages available
$number_of_pages = ceil($number_of_results/$results_per_page);
// determine which page number visitor is currently on
if (!isset($_GET['page'])) {
$page = 1;
} else {
$page = $_GET['page'];
}
// determine the sql LIMIT starting number for the results on the displaying page
$this_page_first_result = ($page-1)*$results_per_page;
// retrieve selected results from database and display them on page
$sql='SELECT * FROM ETF LIMIT ' . $this_page_first_result . "," .$results_per_page;
$result = mysqli_query($con, $sql);
while($row = mysqli_fetch_array($result)) {
echo $row['ETF'] . ' ' . $row['ETF NAME']. '<br>';
}
// display the links to the pages
for ($page=1;$page<=$number_of_pages;$page++) {
echo '<a href="index.php/stocks/sec-forms/?page=' . $page . '">' . $page. '</a>';
}
答案 0 :(得分:0)
尝试:
$sql='SELECT * FROM ETF LIMIT ' . $results_per_page . ' OFFSET ' . $this_page_first_result;
同样如上所述,您应该使用'ORDER BY'对某个列进行排序,以获得一致的结果。
答案 1 :(得分:0)
你应该改变
$sql='SELECT * FROM ETF';
$result = mysqli_query($con, $sql);
$number_of_results = mysqli_num_rows($result);
这样的事情
$count = mysqli_fetch_assoc(mysqli_query($con,"SELECT COUNT(*) AS RC FROM ETF"));
$number_of_results=$count['RC'];
因为从mysql(索引,如果它是一个大表)获取计数更快,而不是获取所有表数据(因为SELECT *...
)来循环它只是为了行计数。
// retrieve selected results from database and display them on page
$sql='SELECT * FROM ETF LIMIT ' . $this_page_first_result . "," .$results_per_page;
您使用了良好的查询,但使用了错误的功能来获得结果。
查询应该是
$sql='SELECT * FROM ETF LIMIT ' . $results_per_page . "," .$this_page_first_result;
或:
$sql='SELECT * FROM ETF LIMIT ' . $results_per_page . " OFFSET " .$this_page_first_result;
这两项都有效。
更改
while($row = mysqli_fetch_array($result)) {
echo $row['ETF'] . ' ' . $row['ETF NAME']. '<br>';
}
到
while($row = mysqli_fetch_assoc($result)) {
echo $row['ETF'] . ' ' . $row['ETF NAME']. '<br>';
}
因为&#34; mysqli_fetch_array&#34;获取数组宽度编号的索引(例如0,1,2 ...)不是您尝试使用的文本索引,但是&#34; mysqli_fetch_assoc&#34;那是你需要的。
完整代码应为
<?php
$con=mysqli_connect('your server','login to database','database logins password','database name');
// define how many results you want per page
$results_per_page=10;
// find out the number of results stored in database
$count=mysqli_fetch_assoc(mysqli_query($con,"SELECT COUNT(*) AS RC FROM ETF"));
$number_of_results=$count['RC'];
// determine number of total pages available
$number_of_pages=ceil($number_of_results/$results_per_page);
// determine which page number visitor is currently on
if(!isset($_GET['page']))
{
$page=1;
}
else
{
$page=$_GET['page'];
}
// determine the sql LIMIT starting number (OFFSET) for the results on the displaying page
$this_page_first_result=($page-1)*$results_per_page;
// retrieve selected results from database and display them on page
$sql="SELECT * FROM ETF LIMIT $results_per_page,$this_page_first_result";
$result=mysqli_query($con, $sql);
// Loop to show results
while($row = mysqli_fetch_assoc($result))
{
echo $row['ETF'].' '.$row['ETF NAME'].'<br>';
}
// display the links to the pages
for($page=1;$page<=$number_of_pages;$page++)
{
echo'<a href="?page='.$page.'">'.$page.'</a> ';
}
mysqli_close($con);
?>
答案 2 :(得分:0)
使用OFFSET
和LIMIT
对网页进行分页会导致两个错误 - 显示的重复行和未显示的行。
为什么?
INSERTed
或DELETEd
,属于前10个。[Next]
,然后转到显示下10行的页面。但是等等,它没有显示“下一个”10行,它显示行#11-20。并且,由于第1-10行中的某些内容发生了变化,因此在您离开的地方行并没有真正继续。我刚刚给你一个如何避免它的提示 - “记住你离开的地方”而不是使用OFFSET
。 More。