我想运行一个查询,根据另一个表的列中是否存在值来排序我的数据,如果另一个列中没有数据,它应该按当前表中的列排序。
说明: -
成员表:包含所有成员的列表。
消息表:存储两个成员之间的聊天对话
From_ID is basically sender id
To_ID is basically recipient id
如果成员1002登录到应用程序,我想要从成员表中检索所有用户的列表,其顺序应首先包含成员1002在消息表中最近会话(发送或接收)的用户,然后是其他用户来自会员表。
表:成员
id name
1001 john
1002 vicky
1003 Joseph
1004 Donald
1005 David
1006 Ram
1007 Watson
1008 Jacob
1009 cathrine
表:消息
from_id to_id date
1003 1009 21-01-2018
1007 1002 21-01-2018
1008 1001 02-01-2018
1002 1008 01-01-2018
select *
from members
where id = '1002' order by (messages????????);
结果: 输入id 1002
Desired output:
1007
1008
1001
1003
1004
1005
1006
1009
答案 0 :(得分:2)
您首先需要用户1002的最近对话伙伴。实现此目的的最简单方法是按最新消息日期排序:
select *
from members m
where id <> 1002
order by
(
select max(ms.date)
from messages ms
where (ms.from_id = m.id and ms.to_id = 1002)
or (ms.from_id = 1002 and ms.to_id = m.id)
) desc nulls last;