仅从 mnesia 中选择一列

发布于 2024-12-24 16:43:45 字数 166 浏览 1 评论 0原文

我怎样才能从 mnesia 中只选择一列? 我可以使用以下代码选择 ets 表中的唯一列:

ets:match(AllData_TableId, {'_', '$1','_',','_'},3),

我需要类似的 mnesia。

谢谢。

how can i select only one column from mnesia?
I can select onle column in ets table with this code:

ets:match(AllData_TableId, {'_', '$1','_',','_'},3),

I need something similar for mnesia.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最偏执的依靠 2024-12-31 16:43:45

在此处找到的示例中: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])).

In the examples found here: http://en.wikibooks.org/wiki/Erlang_Programming/Using_mnesia, look at how the author uses the function mnesia:match_object/1, and the consider reading it here more http://www.erlang.org/doc/man/mnesia.html#match_object-1

However, we are advised to design our mnesia databases and/or tables in a way to avoid the use of this method. This is because it makes mnesia traverse the entire table looking for a match.

What you need is 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])).
红衣飘飘貌似仙 2024-12-31 16:43:45

您可以使用 mnesia:select 来实现:

Spec = [{#tablename{columnname = '$1', _ = '_'}, [], ['$1']}],
{atomic, Result} = mnesia:transaction(fun() -> mnesia:select(tablename, Spec) end),
Result.

You can use mnesia:select for that:

Spec = [{#tablename{columnname = '$1', _ = '_'}, [], ['$1']}],
{atomic, Result} = mnesia:transaction(fun() -> mnesia:select(tablename, Spec) end),
Result.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文