В примерах, найденных здесь: http://en.wikibooks.org/wiki/Erlang_Programming/Using_mnesia, посмотрите, как автор использует функцию mnesia:match_object/1
, и подумайте над прочтением ее здесь подробнее http://www.erlang.org/doc/man/mnesia.html#match_object-1
Тем не менее, мы рекомендуем проектировать наши базы данных и / или таблицы mnesia таким образом, чтобы избежать использования этого метода. Это потому, что это заставляет мнезию пересекать весь стол в поисках совпадения.
Что вам нужно, это qlc
-include_lib("stdlib/include/qlc.hrl").
select(Q)->
case mnesia:is_transaction() of
false ->
F = fun(QH)-> qlc:e(QH) end,
%% mnesia:transaction(F);
mnesia:activity(transaction,F,[Q],mnesia_frag);
true -> qlc:e(Q)
end.
-record(book,{title,isbn,price,category}).
book_title({book,ISBN})->
select(qlc:q([X#book.title || X <- mnesia:table(book),X#book.isbn == ISBN])).