一些信息
我目前正在开展一个项目,在那里我可以将我的工作展示为项目。
在我的数据库中,我已将其设置为list
内的数字告诉PHP它应该在哪里 - 根据MYSQL查询。
在我的项目页面中,我创建了分页,这样如果有超过5行,则会在分页中添加新的项目列表页面。
(我的前后分页是通过链接的图像完成的)
我使用Jquery Ajax POST来调用新页面。
问题:
我曾经设置我的PHP查询按name
(项目名称)排序,但我创建了一个新列list
,以便我可以按自定义顺序显示它们 - 根据数字是在list
但自从我将其从name
更改为list
后,该页面只显示了5条记录,不再向我提供我的分页选项(应该在何时开始)
我知道问题与分页中的2个查询有关 - 有人能告诉我如何解决此问题。
我试过让list
列Char,Varchar和INT都没有帮助! :(
守则:
PHP分页:
<?
$get_stuff = mysql_query("SELECT * FROM `projects` WHERE `cat`='$arrc' ORDER BY `list` ASC")or die(mysql_error());
$getid = mysql_num_rows($get_stuff);
$r = mysql_fetch_row($get_stuff);
$numrows = $r[0];
// number of rows to show per page
$rowsperpage = 5;
// find out total pages
$totalpages = ceil($numrows / $rowsperpage);
// get the current page or set a default
if (isset($_POST['pid']) && is_numeric($_POST['pid'])) {
// cast var as int
$currentpage = (int) $_POST['pid'];
} else {
// default page num
$currentpage = 1;
} // end if
// if current page is greater than total pages...
if ($currentpage > $totalpages) {
// set current page to last page
$currentpage = $totalpages;
} // end if
// if current page is less than first page...
if ($currentpage < 1) {
// set current page to first page
$currentpage = 1;
} // end if
// the offset of the list, based on current page
$offset = ($currentpage - 1) * $rowsperpage;
// get the info from the db
$get_stuff2 = mysql_query("SELECT * FROM `projects` WHERE `cat`='$arrc' ORDER BY `list` ASC LIMIT $offset, $rowsperpage")or die(mysql_error());
while($projectz = mysql_fetch_array($get_stuff2)){
?>
<ul class="projex">
<li onClick="project('project','<? echo $projectz['id']; ?>','1','<? echo $currentpage; ?>')" class="onclick"> <? echo $projectz['name']; ?>
</ul>
<?
}
?>
我没有添加我的链接代码,因为我知道这不是问题。
答案 0 :(得分:1)
您的问题似乎在这里:
<?
$get_stuff = mysql_query("SELECT * FROM `projects` WHERE `cat`='$arrc' ORDER BY `list` ASC")or die(mysql_error());
$getid = mysql_num_rows($get_stuff);
$r = mysql_fetch_row($get_stuff);
$numrows = $r[0];
您将行数放入$getid
,然后忽略该变量并将结果集中的第一个返回列放入$numrows
并使用它。这意味着所有分页计算都基于返回的第一列而不是行数。我猜想当按name
订购时,第一列为7,当按list
排序时,第一列为5或更少。
我建议的解决方法是在SQL查询中获取COUNT
行,除非迫切需要$getid
未在您的示例中显示:
<?php
$get_stuff = mysql_query("SELECT COUNT(*) FROM `projects` WHERE `cat`='$arrc'")or die(mysql_error());
$r = mysql_fetch_row($get_stuff);
$numrows = $r[0];