2016-09-27 84 views
0

这是我的用户表 enter image description here 这是我的留言表 enter image description here如何找到从消息表最后一条消息,也找到了用户

,这是我的列表表格 enter image description here

现在我获得成功用这个查询得到最后一条消息

enter code here 
$coreQueryUser = $this->Message->query(' 
      select m.* 
      from 
       messages m 
       inner join (
       select max(id) as maxid 
       from messages 
       where messages.list_id = 3 
       group By (if(sender_id > reciever_id, sender_id, reciever_id)), 
       (if(sender_id > reciever_id, reciever_id, sender_id)) 
       ) t1 on m.id=t1.maxid 
     '); 

当我运行这个查询时,它给了我foll由于输出: -

enter code here 
<pre>Array 
(
[0] => Array 
    (
     [m] => Array 
      (
       [id] => 2 
       [sender_id] => 10 
       [reciever_id] => 21 
       [list_id] => 3 
       [message] => hello sir 
       [add_date] => 2016-09-25 08:24:38 
       [is_check] => 0 
      ) 

    ) 

[1] => Array 
    (
     [m] => Array 
      (
       [id] => 7 
       [sender_id] => 10 
       [reciever_id] => 22 
       [list_id] => 3 
       [message] => hmm 
       [add_date] => 2016-09-27 00:00:00 
       [is_check] => 0 
      ) 

    ) 
) 

现在您在第一阵列的输出中看到SENDER_ID = 10和reciver_id = 21 和LIST_ID = 3 列表由用户i希望获取其编号为10的输出产生用户ID为21的用户数据。请记住,当接收者将消息发送给发件人时,ID正在交换。在这种情况下我也想的用户ID的数据是21

请帮我:(

回答

0

Finallly我找到我自己的

enter code here 
$coreQueryUser = $this->Message->query(' 
      select m.* ,u.* 
      from 
       messages m 
       inner join (
       select max(id) as maxid 
       from messages 
       where messages.list_id = " '. $data['list_id'] .'" 
       group By (if(sender_id > reciever_id, sender_id, reciever_id)), 
       (if(sender_id > reciever_id, reciever_id, sender_id)) 
       ) t1 on m.id=t1.maxid 
       join 
       users u ON u.id = (CASE WHEN m.sender_id = 10 
            THEN m.reciever_id 
            ELSE m.sender_id   
           END) 
     '); 
+0

请,这是{the_current_year}的解决方案,不直接将数据添加到查询中,始终使用绑定!此代码要求SQL注入攻击。 – ndm

+0

感谢您的建议,请您提供从sql注入安全的代码 – kunal

+0

http://book.cakephp.org/2.0/en/models/ retrieveing-your-data.html#prepared-statements,或将参数作为第二个参数传递给query()方法。 – ndm