Вернуть две последние записи в эрланге
У меня есть эта запись:
-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).
Примечание. Я не тестировал этот код, поэтому он может содержать некоторые ошибки. Я проверю это сегодня вечером.