重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本人用ThinkPHP3.2,今天正在开发一个需要分组显示的功能,可是从数据库中把相应数据读取后直接用group分组,结果每组显示的是最老的记录,我的需求是要显示每组的最新记录。在网上大搜一翻后,未果,本人决定自行研究,现将方法记录于此以防遗忘。
成都创新互联服务项目包括信丰网站建设、信丰网站制作、信丰网页制作以及信丰网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,信丰网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到信丰省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
其实很简单,以供就两步:
第一步:
将符合条件的数据全部取出,暂不用group分组,作为子查询:
[php] view plain copy
$subQuery = $model-field('id,name')-table('tablename')-where($where)-order('time desc')-select(false);
第二部:
利用子查询进行查询分组
[php] view plain copy
$model-table($subQuery.' a')-group('field')-select();span style="font-family: Arial, Helvetica, sans-serif;" /span
好了,思路就是这样。希望对大家有帮助!
M("Table')-group("date")-select();
如果你每一行数据都要显示,就应该用order:
M("Table")-order("date")-select();
$tab=100; 每个显示多少
$total=一共多少。(select cout(*) from xx);就可以
$page=ceil($total/$tab)需要几页,比如一共10个,每页3个就是10/3=3.....1,所以ceil向上取整10/3=4页
$nowPage=0;
然后select * from xx limit $nowPage*$tab,$tab;就可以取出相应的了
第一个 就是0,0*100然后取100条,就是1-100;
然后1*100,再取100条,就是 101-200;
分组查询原理都是SQL的分组查询,THINKPHP中只是用到他自己的一些自定义的方法!比如 join()、group()、having()方法等,实际对应的也是SQL里的这些关键字!
例如本次需求是要按照cid进行分组,按照通常的做法是 SELECT * FROM 表名 GROUP BY cid,这样就能按照cid进行分组筛选!然后使用THINKPHP的时候则使用 M('表名')-group('cid')-select(); 实际生成的语句和原始SQL代码是一样的。
要是只显示一个的话 用 array_unique() 函数 去除数组的重复项就行了
要是都显示的话 用 rsort 或 sort 之类的函数对数据排序
愚见:
用函数explode(",",$hq_str_sh601006)
能把字符串按照逗号分开。可以直接赋值给一个数组变量。
如:$hq_str_arr=explode(",",$hq_str_sh601006);
然后你自己可以从数组中按照你获取的顺序给数组中相应的元素赋值给数据库的对应字段。
希望有帮助。