如何从聊天对话中获取最后消息?

时间:2014-12-04 13:21:37

标签: php mysql cakephp

您好我有一个表名messages我想从两个用户之间的聊天对话中获取最后一条消息。

表 -

id  from_id   to_id    text     created
========================================
1      1        2     hi        2014-12-01 10:30:10
2      2        1     Hello     2014-12-01 10:30:20
3      3        1     Hi chinu  2014-12-01 10:32:02
4      3        1     hw r u?   2014-12-01 10:32:22
5      2        1     h r u?    2014-12-01 10:33:01

请检查我的查询=

//$user_id=$this->Session->read('Auth.User.id');
$user_id=1;
$fields=array('DISTINCT(Message.from_id), Message.id, Message.text, Message.created');

    $this->Paginator->settings = array(
            'conditions'=>array('Message.to_id'=>$user_id),
            'limit' => 30,
            'order' => array(
                'Message.created' => 'DESC',
                'Message.id' => 'DESC'
            ),
            'fields'=>$fields,
            'group'=>array('Message.from_id')
    );
    $inbox = $this->Paginator->paginate('Message');
    pr($inbox);
    $this->set('inbox', $inbox);

我希望获得2到3个id之间的最后一条消息对话。输出看起来像 -

id  from_id   to_id    text     created
========================================
5      2        1     h r u?    2014-12-01 10:33:01
4      3        1     hw r u?   2014-12-01 10:32:22

请帮帮我。如果您不了解cakephp,请在此处发布核心php MySQL查询。

由于 chatfun

3 个答案:

答案 0 :(得分:0)

我认为这个查询可行(虽然我不明白为什么' to_id' = 1在你的预期输出中,也许我没有达到你的目的)

SELECT 'id', 'from_id', 'to_id', 'text', 'created'
FROM Message
WHERE ('from_id' = 2 AND 'to_id' = 3) OR ('from_id' = 3 AND 'to_id' = 2)
ORDER BY created DESC
LIMIT 1

答案 1 :(得分:0)

查询如何实现您正在查看的内容,即从每个from_id获取最后一个对话

select t1.* from Message 
t1 left join Message t2  
on t1.from_id = t2.from_id 
and t1.id<t2.id where t2.id is null;

您有一个主键id auto_incremented,因此可以在比较中使用它而不是日期。

或者

select t1.* from Message t1 
where not exists (
select 1 from Message t2 where t1.from_id = t2.from_id and t1.id < t2.id
);

答案 2 :(得分:0)

请检查此查询 -

SELECT * FROM (SELECT DISTINCT * FROM messages WHERE (from_id=1 OR to_id=1) ORDER BY created DESC) as m GROUP BY `from_id`