-1

我有这个记录:

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

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

4

2 回答 2

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

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

于 2013-03-21T13:05:35.287 回答
1

这个怎么样:

LastKey = mnesia:last(person)
SecondLastKey = mnesia:prev(person, LastKey)
于 2013-03-21T08:58:02.463 回答