【问题标题】:Mnesia - Check for a value in either of the keys in the tableMnesia - 检查表中任一键的值
【发布时间】:2013-05-15 16:27:58
【问题描述】:

我有一个使用以下记录创建的记忆表“用户”

-record(users,{username,nickname,age})

假设我有如下记录的 mnesia 表

users | username | nickname | age

users | John     | baddy    | 25 

users | Monk     | John     | 26

我有一个与表格匹配的名称...(比如“John”)..我想选择或匹配具有“John”作为用户名或昵称的行...我怎样才能做到这一点?如果有人能建议我一个方法,我会很高兴...

谢谢

【问题讨论】:

    标签: erlang mnesia


    【解决方案1】:

    查看 QLC - there's a simple example here on Learn You Some Erlangman page here。您可以使用布尔值进行匹配,例如(在伪代码中)(用户名 == John 或昵称 == John)。

    【讨论】:

      【解决方案2】:
      选择(Q)-> 案例记忆:is_transaction() 的 假-> F = fun(QH)-> qlc:e(QH) 结束, mnesia:activity(transaction,F,[Q],mnesia_frag); 真-> qlc:e(Q) 结尾。 read_by_name_or_nickname(姓名)-> 数据 = select(qlc:q([X || X

      【讨论】:

        【解决方案3】:
        -module(wy).
        -compile(export_all).
        
        -record(users, {username, nickname, age}).
        -include_lib("stdlib/include/ms_transform.hrl").
        
        create_table()->
            mnesia:create_schema(node()),
            mnesia:start(),
            mnesia:create_table(users, [{attributes, record_info(fields, users)}]).
        
        test()->
            Fun = fun()->
                      mnesia:write(#users{username = "John", nickname = "baddy", age = 25}),
                      mnesia:write(#users{username = "DaDa", nickname = "KaKa", age = 24}),
                      mnesia:write(#users{username = "Monk", nickname = "John", age = 24})
                  end,
            mnesia:transaction(Fun),
        
            Fun2 = ets:fun2ms(fun({users, UserName, NickName, Age}) when
                               UserName == "John" orelse NickName == "John" ->
                                    {users, UserName, NickName, Age}
                          end), 
        
            mnesia:transaction(fun() -> mnesia:select(users, Fun2) end).
        

        【讨论】:

        猜你喜欢
        • 2023-03-11
        • 2013-12-15
        • 1970-01-01
        • 2011-03-04
        • 2016-09-29
        • 2012-06-08
        • 1970-01-01
        • 2015-06-13
        • 1970-01-01
        相关资源
        最近更新 更多