使用查询

时间:2018-04-26 10:07:46

标签: mysql sql laravel eloquent

我正在使用MySQL数据库来存储我的SQL表看起来像这样的聊天消息

id  sent_by    message  read    received_by created_at          updated_at
786 6           Hi      0       1           2018-04-26 13:00:15 2018-04-26 13:00:15
774 211         Hello   1       6           2018-04-26 12:20:25 2018-04-26 12:59:59
772 1           hi      1       6           2018-04-26 12:19:28 2018-04-26 13:00:14

以上数据来自我,结果如下:

SELECT *
      FROM `enrich_chat_message` 
      WHERE id IN (SELECT MAX(id) AS id
      FROM `enrich_chat_message`  
      WHERE received_by=6 OR sent_by=6
             GROUP BY sent_by) 
ORDER BY created_at DESC

但我希望有这样的记录

id  sent_by    message  read    received_by     chat_with       created_at          updated_at
786 6           Hi      0       1               1           2018-04-26 13:00:15 2018-04-26 13:00:15
774 211         Hello   1       6               211         2018-04-26 12:20:25 2018-04-26 12:59:59

此处在以上所需输出中,我添加了一个新列chat_with一个唯一列,该列显示sent_byreceived_by的唯一值。 “6”是我自己的当前用户名,用户从该用户名登录。

所以我想用它来显示聊天的DESC顺序中的所有聊天。我不希望这里重复数据。不应在1中重复使用chat_with

寻找任何改进查询的建议。

谢谢! (提前)

1 个答案:

答案 0 :(得分:0)

我认为这就是你想要的:

SELECT emc.*, 
       (CASE WHEN emc.received_by = 6 THEN emc.sent_by ELSE emc.received_by END) as chat_with
FROM `enrich_chat_message` emc
WHERE emc.id IN (SELECT MAX(emc2.id) AS id
                 FROM `enrich_chat_message` emc2 
                 WHERE 6 IN (emc2.received_by, emc2.sent_by)
                 GROUP BY (CASE WHEN emc2.received_by = 6 THEN emc2.sent_by ELSE emc2.received_by END)
                )
ORDER BY emc.created_at DESC;

CASE表达式的目的是获取其他用户。