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代码。如果不将所有记录与指定的发送方和接收方进行匹配,则无法处理当前表