我有两个表,如下所示:

用户(表1)

id name email     passs
1  u1   uemail1   pass1
2  u2   uemail2   pass2
3  u3   uemail3   pass3
4  u4   uemail4   pass4


消息(表2)

mess_id sender receiver message_text  send_time
1        1     2        text1         2019-03-25 09:39:05
2        1     2        text2         2019-03-30 15:10:54
3        1     3        text3         2019-03-30 15:11:59
4        1     4        text4         2019-03-30 15:12:48
5        1     4        text5         2019-03-30 15:13:53
6        4     1        text6         2019-04-09 09:26:53


登录的用户是u1,我想获取最新的对话,这是第六次。

现在我想要的是找到u1以及与谁的最新对话,然后从与u1拥有最新对话的其他用户的用户表中查找详细信息

希望您能回答我的问题,每个人都很清楚。

我该怎么办这是1查询

结果将是其他用户的详细信息,在上述情况下,用户将是u4

id name email     passs
4  u4   uemail4   pass4


到目前为止,我已经尝试过了但是没有得到我想要的结果

select name from users where id=(select receiver_id,sender_id from messages where receiver_id or sender_id=1 order by send_time desc limit 1)

最佳答案

一种方法是确定派生表中的另一个用户ID,然后将其连接到用户表以获取用户详细信息。

SELECT
  u.*
FROM
  user AS u
JOIN
(
  SELECT
    IF(sender <> 1, sender, receiver) AS other_user  /*Logged-in User Id is mentioned here */
  FROM messages
  WHERE sender = 1 OR receiver = 1  /*Logged-in User Id is mentioned here */
  ORDER BY send_time DESC LIMIT 1   /*Get the latest message row */
) AS dt ON dt.other_user = u.id


IF(sender <> 1, sender, receiver)确定其他用户ID。如果sender不为1(已登录用户),则我们将sender视为另一个用户,否则为receiver。这是基于(最有效的)假设,即senderreceiver始终是不同的值。

关于mysql - 使用单个查询从多个数据库中获取多个记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55594360/

10-12 14:17
查看更多