Erlang 如何从mnesia中选择两个用户之间发送的最后一条消息

Erlang 如何从mnesia中选择两个用户之间发送的最后一条消息,erlang,mnesia,Erlang,Mnesia,我需要选择两个用户之间发送的最后一条消息 现在使用这个基本方法,我选择两个用户之间的所有消息,但这是一个漫长的过程 Guard = [{'=:=','$1',OID}], Match = #pms{ from = '$1', to = '$2', body = '$3', _ = '_' }, Result = ['$$'], {ok, Result} = mnesia:transaction(fun()->mnesia:select(pms,

我需要选择两个用户之间发送的最后一条消息

现在使用这个基本方法,我选择两个用户之间的所有消息,但这是一个漫长的过程

Guard = [{'=:=','$1',OID}],
Match = #pms{
    from = '$1',
    to   = '$2',
    body = '$3',
    _    = '_'
},

Result = ['$$'],
{ok, Result} =  mnesia:transaction(fun()->mnesia:select(pms,[{Match, Guard, [Result]}]) end), 
查看记录

-record(pms,{
    message_id,from,to,body,time,seen=0}).
<> p>所以我有两个变量,从这里到我需要的是选择每一个会话的最后一条消息,即用户ID插入到或从

请考虑使用

我在下面写了一些代码,可以满足您的要求

F = fun() ->                                                                                                                  
 Q = qlc:q([E || E <- mnesia:table(pms),E#pms.from == "a",E#pms.to == "b"]),                                     
 Q2 = qlc:keysort(2, Q, [{order, descending}]),                                                                  
 Qc = qlc:cursor(Q2),                                                                                            
 qlc:next_answers(Qc, 1)                                                                             
end,                                                                                                                    
mnesia:transaction(F).

此代码获取您和您之间发送的对话,将其修改为{Epms.from==a或else Epms.to==b},但我仍然需要选择每个对话的最后一条消息。如果您不想一次检索所有对话,我认为您必须编写一些类似于SQL中的自连接的qlc代码。如果不将所有记录与指定的发送方和接收方进行匹配,则无法处理当前表