工作中的一个案例,这个问题,把我纠结死了,最后还是请教人,才解决的。这里要记录下来,避免以后还是出现这样的问题。写的不是很好,望见谅!如下:

 
题目:产品页展示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;
	}
 
相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!