返回erlang中的最后两条记录

时间:2013-03-21 08:54:31

标签: erlang mnesia

我有这个记录:

-record(person, {id, firstname, lastname}).

此表包含以下值:

1  anis    hila
2  samir   alagi
3  marwen  fares
4  sana    gabsi
5  safa    sassi

我想开发一个函数,它返回表人的最后两个记录

意思是返回:

4  sana    gabsi
5  safa    sassi

我有一个返回最后一个ID的代码

Key=mnesia:last(person).

有人可以帮我解决这个问题

2 个答案:

答案 0 :(得分:1)

这个怎么样:

LastKey = mnesia:last(person)
SecondLastKey = mnesia:prev(person, LastKey)

答案 1 :(得分:1)

要在事务中执行某些操作,您只需定义一个执行所需操作的函数,并将此函数作为mnesia事务的参数传递。

获得最后N个人的功能:

getlast(N) ->
    % get list of the last N Keys in reverse order
    Keys = lists:foldl(fun(_Num,Acc) -> [mnesia:prev(person,hd(Acc))|Acc] end, [mnesia:last(person)],lists:seq(2,N)),
    % get the list of the last N records in correct order and return
    lists:foldl(fun(Key,Acc) -> [mnesia:read(person,Key)|Acc] end, [],Keys).

获取最后2个元素的交易

Trans = fun() -> ?MODULE:getlast(2),
Result = mnesia:transaction(Trans).

注意:我没有测试此代码,因此可能会出现一些错误。我今晚会检查一下。