我有一个带有以下列的表wall_messages
ID
from_user_id
主题
消息
日期
message_reply_id
我想获取一个CActiveDataProvider,其中包含_from_user_id_列的给定值的所有wall消息。到目前为止一切都很好。
$outgoingMessages = new CActiveDataProvider ('Messages', array (
'criteria' => array (
'condition' => 'from_user_id ='.$userId->id,
),
'pagination' => array (
'PageSize' => 5,
)
));
现在,我需要添加以下条件:对于那些匹配_from_user_id_值且匹配_message_reply_id_值的wall消息,我只想保留其中一行。哪一个?具有“最早”日期的那个。我怎样才能做到这一点?我对sql查询一点也不擅长,所以这对我来说很难。谢谢!
我想出了一个与优雅相反的临时解决方案:
$sentMessages = array();
$alreadyIncludedMessages = array();
foreach ($user->messagesOut as $mess) {
if (!in_array($mess->message_reply_id, $alreadyIncludedMessages)){
$sentMessages[] = $mess;
$alreadyIncludedMessages[]=$mess->message_reply_id;
}
}
$outgoingMessages = new CActiveDataProvider ('Messages', array (
'pagination' => array (
'PageSize' => 5,
),
'data'=>$sentMessages
));
答案 0 :(得分:1)
如果您想要返回一个值,可以使用以下内容:
'criteria' => array (
'condition' => 'from_user_id = :userId AND message_reply_id = :messageId',
'order' => 'date ASC',
'params' => array(':userId'=>$userId->id, ':messageId'=>$messageId)
),
'pagination' => array (
'PageSize' => 1,
)
并且不显示分页。 如果您希望为每个用户显示最早的消息,您可能必须使用子查询或填充数组,然后使用 CArrayDataProvider ,这对复杂查询非常有用。