2011-11-17 106 views
0

我想在我的关系数据库的查找方法中使用Group我想通过user_id过滤结果集中的唯一receiver_id来获取最新记录是我的代码:CakePHP在查找方法中使用组

$this->loadModel('Chat'); 
     $lastChat = $this->Chat->find('all', array(
      'conditions' => array(
       'Chat.user_id' => $user_id['User']['id'] 
      ), 
      'fields' => array(
       'Chat.id', 
       'Chat.chat', 
       'Chat.user_id', 
       'Chat.receiver_id', 
       'Chat.read', 
       'Chat.created' 
      ), 
      'group' => array('Chat.receiver_id'), 
      'order' => array('Chat.created DESC') 
     )); 

但是,这似乎并不奏效。我不知道为什么,但我只得到一个结果...

我怎样才能得到多个结果的基础上面的规则。

+0

看起来好像没什么问题。我建议你试着找出$ user_id是否真的包含你的想法。 – budwiser

+0

你打印它生成的查询吗?也许看着sql你可能会看到你的错误。要做到这一点,只需更改find​​Query并打印lastchat即可。尝试使用'select * from chats where user_id = $ userid'来查看它是否给你更多的结果。 – api55

+0

就像api55说的那样,告诉我们它正在生成的查询 - 然后更容易帮助你。 – Dave

回答

0

尝试以下操作:

$db = $this->Chat->getDataSource(); 
$chats = $db->query("SELECT * , (Chat.user_id + Chat.receiver_id) AS dist 
    FROM (
     SELECT * 
     FROM chats t 
     WHERE (t.user_id =$id OR t.receiver_id =$id) 
     ORDER BY t.id DESC 
    ) Chat 
    GROUP BY dist 
    ORDER BY Chat.id DESC");