2017-01-12 41 views
1

我正在使用laravel框架5.3。执行查询后,我得到一个错误的结果。我有两个表一个是用户和其他的message.Here是我的方案如何从消息表中与每个其他用户的所有会话中获取最后一条消息?

enter code here 
User table- 

id name 
    1  a 
    2  b 
    3  c 


Message table: 
id sender_id receiver_id message 
1  1    2   hii 
2  2    1   hello 
3  1    3   hiiii 

现在我想获取这些用户有SENDER_ID这里receiver_id 之间的最后一条消息是我的代码: -

enter code here 
$coreQueryUser=DB::select(
     ' 
      select m.* ,u.* 
      from 
       messages m 
       inner join (
       select max(id) as maxid 
       from messages 
       where messages.sender_id = 1 // here i am sending userid is 1 
       group By (if(sender_id > receiver_id, sender_id, receiver_id)), 
       (if(sender_id > receiver_id, receiver_id, sender_id)) 
       ) t1 on m.id=t1.maxid 
       join 
       users u ON u.id = (CASE WHEN m.sender_id = 1 
            THEN m.sender_id 
            ELSE m.receiver_id   
           END) 
     ' 
     ); 

注意 - 我想找到所有已与用户ID(1)提前:)

回答

0

使用ORDER BY短语 由于最后的消息,并限制你的结果使用LIMIT
我的回答是假设id行你主键,这是自动递增代码的

编辑\

enter code here 
$coreQueryUser=DB::select(
    ' 
     select m.* ,u.* 
     from 
      messages m 
      inner join (
      select max(id) as maxid 
      from messages 
      where messages.sender_id = 1 // here i am sending userid is 1 
      group By (if(sender_id > receiver_id, sender_id, receiver_id)), 
      (if(sender_id > receiver_id, receiver_id, sender_id)) 
      ) t1 on m.id=t1.maxid 
      join 
      users u ON u.id = (CASE WHEN m.sender_id = 1 
           THEN m.sender_id 
           ELSE m.receiver_id   
          END) 
     ORDER BY m.id DESC LIMIT 1 
    ' 
    ); 
+0

我想查询一样,将取回的所有对话用户标识为1的最后一条消息 –

相关问题