我如何从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