Вернуть две последние записи в эрланге

У меня есть эта запись:

-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

У меня есть код, который возвращает последний идентификатор

Key=mnesia:last(person).

может кто-нибудь помочь мне решить эту проблему

2 ответа

Как насчет этого:

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

Чтобы выполнить что-либо в транзакции, вам нужно только определить функцию, которая делает то, что вы хотите, и передать эту функцию в качестве аргумента транзакции 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).

Примечание. Я не тестировал этот код, поэтому он может содержать некоторые ошибки. Я проверю это сегодня вечером.

Другие вопросы по тегам