一个企业表,一个发布职位表,每个企业有发布多个职位,group by职位表里的uid,也就是按企业分组,
排序是按最新发布职位的企业排在前边,职位表里有发布时间dateline字段,但是group之后会找不到组里最大时间戳,排序会失败,解决办法是找组里最大的时间戳即可,重点是max()函数
A、使用两表联查,
$job = M('Job');
$qy=$job
->join('wgb_user_profile on wgb_job.uid=wgb_user_profile.uid')
->field('max(wgb_job.dateline) as dt,wgb_user_profile.id,wgb_user_profile.name')
->order('dt desc')
->group('wgb_job.uid')
->limit(12)
->select();
$this->assign('qy',$qy);
B、先从职位表里查询出来排序好的企业ID数组,再找企业表里查询出来这个 主要使用field()和max()函数,
//实例化表
$job = M('Job');
$qyy = M('user_profile');
$jobs=$job
->field('max(dateline) as dt,uid')
->group('uid')
->order('dt desc')
->limit(12)->select();
//取出来uid字段,即企业uid
foreach($jobs as $k=>$v){
$uid[]=$v['uid'];
}
$wherearr['uid'] = array('in',$uid);
$as=implode(',',$uid);
$order= "field(uid,$as)";
$qyy = M('user_profile');
$qy = $qyy
->where($wherearr)
->limit(12)
->select();
$this->assign('qy',$qy);