我有一个具有下列列的表wall_messages
id
from_user_id
主题
消息
日期
message_reply_id
我希望获得一个CActiveDataProvider,其中包含具有_from_user_id_列给定值的所有墙壁消息。到目前一切尚好。
$outgoingMessages = new CActiveDataProvider ('Messages', array (
'criteria' => array (
'condition' => 'from_user_id ='.$userId->id,
),
'pagination' => array (
'PageSize' => 5,
)
));现在,我需要添加以下条件:对于那些具有匹配的_from_user_id_值和匹配的_message_reply_id_值的墙壁消息,我只想保留其中的一行。哪个?有“最老”约会的那个。我该怎么做?我对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
));发布于 2011-08-04 03:02:45
如果您只想返回一个值,则可以使用以下内容:
'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,这对于复杂的查询非常有用。
https://stackoverflow.com/questions/6934587
复制相似问题