mysql查询某个id在表中是第几条数据,并且在第几页_sql 查询某条记录在第几页_小黑雷的博客-CSDN博客

来源: mysql查询某个id在表中是第几条数据,并且在第几页_sql 查询某条记录在第几页_小黑雷的博客-CSDN博客

对于一般的企业站内说文章不多但是设计中详情又有返回,可能很多都是记录的,这条数据在第几页。但是还有一种情况如果还有上一篇下一篇,刚好这篇文章在当前页的最后一篇那返回就没有效果了

例如我有表a,

字段有:id int(key),title varchar(64) (文章标题),category int(类别), is_top char(1)(是否置顶),toptime int(置顶时间)

解决方法1:

需要知道这篇文章在文章列表第几条

这时候需要用到mySQL一个函数@rownum 这个就是前面的序号

SELECT id, @rownum := @rownum +1 AS rowsnumber
FROM a, (SELECT@rownum :=0) r
WHERE category = ‘3’
order by is_top desc,toptime desc,id desc
现在知道了在表中第几条了

这时候需要知道第几页用到mySQL函数ceil()/celing()

假设每页5条查询id为106的在第几页结合上面的SQL

select rowsnumber from (SELECT id, @rownum := @rownum +1 AS rowsnumber
FROM a, (SELECT@rownum :=0) r
WHERE category = ‘3’
order by is_top desc,toptime desc,id desc) as a where a.id=106
上一页下一页

select * from (SELECT id,title, @rownum := @rownum +1 AS rowsnumber
FROM a, (SELECT@rownum :=0) r
WHERE category = ‘3’
order by is_top desc,toptime desc,id desc) as a where
a.rowsnumber =”上一页带入上面sql返回条数-1,下一页带入上面sql返回条数+1″
解决方法2:

思路就是在详情页的时候带上第几页,那么返回按钮就知道返回第几页数据了,

上一篇下一篇获取在第几条

结合方法一@rownum用法

例如表中有1,2,3,4,5,6,7条数据,第7条置顶了刚好查看的这篇文章id为4

mysql查询第一页数据每页5条

SELECT id,title, @rownum := @rownum +1 AS rowsnumber
FROM a, (SELECT@rownum :=0) r
WHERE category = ‘3’
order by sticky desc,id desc,stickTime desc limit 0,5
在使用代码处理,下面是php代码

例如查询结果为$data

$rowsnumber=array_reduce($data,function($a,$b) use ($id){

if($b[‘id’]==$id){

$a=$b[‘rowsnumber’];

}

return $a;

},0 );
switch(true){
case $rowsnumber=5:
$lastnews=array_reduce($data,function($a,$b) use ($rowsnumber){

if($b[‘rowsnumber’]==($rowsnumber-1)){

$a=$b;

}

return $a;

},array() );
$nextnews=array();//这里药反查下一页第一条
break;
case $rowsnumber>1 and $rowsnumber<5:
foreach($data as $val){

if($val[‘rowsnumber’] == ($rowsnumber – 1)){

$lastnews=$val;

}

if($val[‘rowsnumber’] == ($rowsnumber + 1)){

$nextnews=$val;

}

}
break;
case $rowsnumber=5:
$nextnews=array_reduce($data,function($a,$b) use ($rowsnumber){

if($b[‘rowsnumber’]==($rowsnumber+1)){

$a=$b;

}

return $a;

},array() );
$lastnews=array();//这里药反查上一页最后一条
break;

}

csdn编辑器没有提示代码可能写的有错误,写的不好望见谅,只是突然想到写一下。
————————————————
版权声明:本文为CSDN博主「小黑雷」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010757785/article/details/85098243

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏