如何从mnesia中仅选择一列? 我可以使用以下代码在ets表中选择onle列:
ets:match(AllData_TableId, {'_', '$1','_',','_'},3),
我需要类似mnesia的东西。
谢谢。
答案 0 :(得分:1)
在此处的示例中: http://en.wikibooks.org/wiki/Erlang_Programming/Using_mnesia ,请查看作者如何使用函数mnesia:match_object/1
,并考虑在此处阅读更多 {{3} } 的
但是,建议我们以避免使用此方法的方式设计我们的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])).
答案 1 :(得分:1)
您可以使用mnesia:select
:
Spec = [{#tablename{columnname = '$1', _ = '_'}, [], ['$1']}],
{atomic, Result} = mnesia:transaction(fun() -> mnesia:select(tablename, Spec) end),
Result.
答案 2 :(得分:-1)
我明白了。只需使用qlc:
Transaction = fun() ->
Query = qlc:q([{Tablename#tablename.columnname} ||
Tablename <- mnesia:table(tablename)]),
qlc:eval(Query)
end.