我有两个表,如下所示:
用户(表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
。这是基于(最有效的)假设,即sender
和receiver
始终是不同的值。关于mysql - 使用单个查询从多个数据库中获取多个记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55594360/