工作中的一个案例,这个问题,把我纠结死了,最后还是请教人,才解决的。这里要记录下来,避免以后还是出现这样的问题。写的不是很好,望见谅!如下:
题目:产品页展示20条数据,前5条必须是vip会员且按时间排序,后15条不管是否vip,按时间排序。
分析:第一步:把vip的数据全部取出来,计算一下它的总分页。
第二步:把表里的全部数据取出来,计算它的总分页。
第三步:将当前页的vip的id取出来,作为下面15条的排除条件。
第四步:判断当前页和vip的分页之间的关系,进行不同的操作,目的是为了得到15条的起始记录数。
第五步:根据上面的判断条件,将两个数组进行合并,前台一次输出。
数据:
+--------+------------------------------+-----+ | itemid | title | vip | +--------+------------------------------+-----+ | 4 | 脉动式灭菌器 | 1 | | 12 | 激光低频治疗仪降三高 | 0 | | 13 | 一次性使用胸腹穿刺包 | 0 | | 14 | 意大利进口排卵测定器 | 1 | | 25 | 专利产品全国火热招商中 | 0 | | 29 | 心室冠脉定量分析系统 | 1 | | 31 | 意大利百胜彩超 | 0 | | 33 | 化疗泵 | 0 | | 37 | 蒸汽灭菌指示卡 | 0 | | 39 | 福瑞欧胰岛素冷却袋 | 0 | | 44 | 脉动式预真空消毒噐 | 1 | | 46 | 脉动式预真空消毒噐 | 0 | | 54 | 封口机 | 1 | | 55 | 蒸馏水机 | 0 | | 56 | 脉动式预真空消毒噐 | 0 | | 59 | 健之源糖尿病治疗仪 | 0 | | 64 | 康视怡(眼部治疗仪) | 0 | | 65 | 血压计 | 0 | | 66 | 诚邀医疗器械经销商 | 0 | | 67 | 增视明目仪PBH-19型弱视治疗仪 | 0 | | 70 | 消杀威牌消毒片 | 0 | | 71 | 舒博士仿真推拿仪 | 0 | | 77 | 超声多普勒胎心监护仪 | 1 | | 80 | 聚氨脂矫形绷带托 | 0 | | 81 | 晓康血糖仪 | 1 | | 82 | 家用心电检测仪爱心宝 | 0 | | 83 | 超声波系列清洗设备 | 0 | | 96 | 一次性使用酒精棉片 | 0 | | 99 | 系列超声波清洗设备 | 0 | | 100 | 系列台式蒸汽灭菌器 | 0 | | 117 | 聚氨脂矫形绷带 | 0 | | 121 | 宝宝心胎儿监护仪 | 0 | | 207 | 巴的宁医用消疤速愈帖 | 1 | | 208 | 胃肠道造影显像剂 | 0 | | 305 | 蒸汽灭菌器 | 0 | | 306 | 高压灭菌锅 | 0 | | 307 | 灭菌器 | 0 | | 308 | 智能蒸汽灭菌器 | 0 | | 310 | 微循环亚健康检测仪 | 0 | | 311 | 微循环检测仪 | 0 | +--------+------------------------------+-----+
代码:
$pagesize = 5; $offset = ($page-1)*$pagesize; sql = "select * from 表 where vip>0 limit {$offset},5"; $viptags = $db->getall($sql); // 取得vip的数据 // 获取到当前页的vip的ID 以便排除在下面的15条里面 foreach($viptags as $vipv){ $vipid .= $vipv['itemid'].","; } $vipid = substr($vipid,0,-1); $g_shu = count($viptags); // 算出vip的总页数 sql = "select * from 表 where vip>0"; $vipnum = $db->getall($sql); $vipnums = count($vipnum); $vippage = ceil($vipnums/5); if($page > $vippage){ if($vippage == 0) $vip1 = 0; else $vip1 = ($vippage-1)*5; $offset = ($page-1)*20-$vip1-$vipnums%5; //echo $vip1;die; $pagesize = 20; }elseif($page == $vippage){ $pagesize = 20 - $g_shu; $offset = ($page-1)*15; }else{ $pagesize = 20 - $g_shu; $offset = ($page-1)*$pagesize; } // 总页数 = vip数+库里的总数 -> 默认$items已经取到全部的记录 $items = $items+$vipnums; // 如果vip值没有了,那么就不需要加in,反之。 $vipsql = ($g_shu>0)?"where itemid not in({$vipid})":""; $sql = "select * from 表 {$vipsql} order by lasttime limit {$offset},{$pagesize}"; $tags = $db->getall($sql); // 这里将得到的两个数组合并为一个整体。 if(count($tags)>0 && count($viptags)>0){ $tags = array_merge($viptags,$tags); }elseif($g_shu == 0 && count($tags) >0){ $tags = $tags; }else{ $tags = $viptags; }
上一篇:
php封装函数单文件和多文件上传函数
下一篇:
如何用php压缩html代码并输出
友情提示:垃圾评论一律封号...