mssql分页下一页只取到第一条数据

nbzz505 2011-07-22 10:04:17
<?
$niandu=$_GET['niandu'];

$link=mssql_connect("MyServer2k","data","1234");
mssql_select_db("data",$link);
$sql="select id,niandu,yuefen,name,time from a where niandu='$_GET[niandu]' order by yuefen desc";
$dataset=mssql_query($sql,$link);
$totalCount=mssql_num_rows($dataset);
$P=$_GET[P];
if(!$P|| $P<1) $P=1;

$PageNum=15;
$start = $PageNum * ($P-1);
?>
<table width="750" border="0" align="center" cellpadding="0" cellspacing="1">
<tr align="center">
<td width="10%" height="20">序号</td>
<td width="10%" height="20">年度</td>
<td width="10%" height="20">月份</td>
<td width="25%" height="20">名称</td>
<td width="20%" height="20">发布时间</td>
<td width="20%" height="20">管理</td>
</tr>
<?

$sql1="select TOP ".$PageNum*($P)." id,niandu,yuefen,name,time from a where niandu='$_GET[niandu]' order by yuefen desc";
$dataset1=mssql_query($sql1,$link);
$count=mssql_num_rows($dataset1);

for ($i=$start;$i<$count;$i++){
list($id,$niandu,$yuefen,$name,$time)=mssql_fetch_row($dataset1);

?>
<tr>
<td height="20"><? echo $i+1?></td>
<td height="20"> <? echo $niandu?></td>
<td height="20"> <? echo $yuefen?></td>
<td height="20"> <? echo $name?></td>
<td height="20"> <? echo $time?></td>
</tr>
<?
}
?>
</table>


15条记录一页,不知道为什么翻到下页时总是取表的第1条记录而不是第16条,请大家帮忙看看
...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyaspnet 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 nbzz505 的回复:]

引用 6 楼 xuzuning 的回复:
mssql 是 sybase 家族成员,另外还有 oracle 等
他们都不提供 limit 子句,而只有 top 子句

你需要这样写
select top 每页行数 * from ( select top 页数*每页行数 * from 表 order by id desc )


$sql1="select TOP ".$PageNu……
[/Quote]

$sql1="select TOP ".$PageNum." * from ( select top ".$PageNum*($P)." * from a) where niandu='$_GET[niandu]' order by yuefen desc";

改为

$sql1="select TOP ".$PageNum." * from ( select top ".$PageNum*($P)." * from a) where niandu='".$_GET[niandu]."' order by yuefen desc";
nbzz505 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xuzuning 的回复:]
mssql 是 sybase 家族成员,另外还有 oracle 等
他们都不提供 limit 子句,而只有 top 子句

你需要这样写
select top 每页行数 * from ( select top 页数*每页行数 * from 表 order by id desc )
[/Quote]

$sql1="select TOP ".$PageNum." * from ( select top ".$PageNum*($P)." * from a) where niandu='$_GET[niandu]' order by yuefen desc";

出现Warning: mssql_query() [function.mssql-query]: message: Incorrect syntax near the keyword 'where'. (severity 15)
xuzuning 2011-07-22
  • 打赏
  • 举报
回复
mssql 是 sybase 家族成员,另外还有 oracle 等
他们都不提供 limit 子句,而只有 top 子句

你需要这样写
select top 每页行数 * from ( select top 页数*每页行数 * from 表 order by id desc )
kyzy_yy_pm 2011-07-22
  • 打赏
  • 举报
回复
$sql1="select TOP ".($start+$PageNum*($P))." id,niandu,yuefen,name,time from a where niandu='$_GET[niandu]'
试一试
nbzz505 2011-07-22
  • 打赏
  • 举报
回复
用的是mssql2000
nbzz505 2011-07-22
  • 打赏
  • 举报
回复
接上面
<tr>
<td align="center"> <?=GlobalClass::turnPage($totalCount,$PHP_SELF."?&niandu=$_GET[niandu]&");?></td>
</tr>

function turnPage($Total,$href,$P,$PageNum,$NotOut=false)
{
$page=$Total/$PageNum;
$totalP=(int)$page;
if($totalP!=$page)
$totalP=$totalP+1;
if(!$P || $P<1) $P=1;
if($P>$totalP && $totalP) $P=$totalP;

if($Total)
{
$Out1="共有".$Total."条记录 当前第".$P."页/共".$totalP."页";
if($P>1)
{
$Out2.="<a href='$href"."P=1'>首页</a> ";
$Out2.="<a href='$href"."P=".($P-1)."'>上页</a> ";
}
else
{
$Out2.="首页 ";
$Out2.="上页 ";
}
if($P!=$totalP)
{
$Out2.="<a href='$href"."P=".($P+1)."'>下页</a> ";
$Out2.="<a href='$href"."P=$totalP'>尾页</a> ";
}
else
{
$Out2.="下页 ";
$Out2.="尾页 ";
}
}
return $Out2;
}
heyli 2011-07-22
  • 打赏
  • 举报
回复
top 只是取多少条数据 当然top加多子查询也是可以分页 如果是sql server 2000以后的数据库用 ROW_NUMBER() 实现来得好

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧