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

时间:2018-01-10 23:22:08

标签: erlang mnesia

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

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

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}).

所以我有两个变量,fromto我需要的是选择每个会话的最后一条消息,即将用户的ID插入from或{{1} }

1 个答案:

答案 0 :(得分:1)

请考虑使用qlc

我在下面写了一些代码可能符合你的要求。

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).