2013-03-21 79 views
-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). 

有人可以幫我解決這個問題

回答

1

如何:

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

感謝您的回覆,但我們應該在代碼中添加事務,因爲該函數有望在事務上下文中調用 – 2013-03-21 11:20:19

+2

因此,您是否看過['mnesia:transaction'](http:// www.erlang.org/doc/man/mnesia.html#transaction-2)? – bereal 2013-03-21 11:42:30

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

注:我沒有測試此代碼,因此它可能有些內容錯誤。我今晚會檢查一下。