数据库里有一个用户的多条数据的时候,而我们又要显示出该用户最新的那一条数据,我们就要用到group以避免重复显示该用户的多条数据。
$message = $model->order('timestamp desc')->group('user')->select();
但TP的group实际使用后,虽然已经用了时间降序来排列,但因为TP的group的原因,显示出来的是该用户最早的一条数据。那么这里要用到子查询了。
$model = M();
$WMSG = M('Message') -> where(array('touser'=>$og_id))-> order('timestamp desc') -> select(false);
$message_id = $model->table($WMSG.' a')->order('timestamp desc')->group('fromuser')->select();
foreach($message_id as $key=>$value) { //循环遍历最新的message_id
$msg_id[] = $value['id'];
}
$map['msg_id'] = array('in',$msg_id); //数组
$this->_list($ViewModel, $map, 'timestamp desc', '', 'fromuser');
这里$WMSG这条是生成一条查询数据库的SQL语句,就是先以时间最新的来排序,查询出对应的数据.
$message_id 就是将$WMSG查询出来的数据以group来去掉重复.
下面的foreach就是遍历查询出来的msg_id,用作下面的list输出。
这样一来就能找到数据库中,该用户多条数据的最新一条, 并显示出来