我如何從mnesia中只選擇一列? 我可以用這個代碼,請在ETS表onle列:從mnesia中只選擇一列
ets:match(AllData_TableId, {'_', '$1','_',','_'},3),
我需要Mnesia的類似的東西。
謝謝。
我如何從mnesia中只選擇一列? 我可以用這個代碼,請在ETS表onle列:從mnesia中只選擇一列
ets:match(AllData_TableId, {'_', '$1','_',','_'},3),
我需要Mnesia的類似的東西。
謝謝。
在這些例子在這裏找到: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數據庫和/或表格以避免使用此方法。這是因爲它使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])).
我知道了。只需使用QLC:
Transaction = fun() ->
Query = qlc:q([{Tablename#tablename.columnname} ||
Tablename <- mnesia:table(tablename)]),
qlc:eval(Query)
end.
您可以使用mnesia:select
爲:
Spec = [{#tablename{columnname = '$1', _ = '_'}, [], ['$1']}],
{atomic, Result} = mnesia:transaction(fun() -> mnesia:select(tablename, Spec) end),
Result.
有在你的代碼的一些錯誤。模塊「amnesia」不完全存在,或者這段代碼意味着一個非常老的erlang版本! – 2012-01-04 09:39:23
健忘症從來沒有真正存在過,它從很早以前就叫做mnesia。一個經理不贊成稱呼數據庫「失憶症」。 :-) – rvirding 2012-01-05 07:42:34