0

次のレコードで作成された記憶喪失テーブル「ユーザー」があります

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

次のレコードのようなmnesiaテーブルがあるとしましょう

users | username | nickname | age

users | John     | baddy    | 25 

users | Monk     | John     | 26

テーブルと一致する名前があります...(「ジョン」と言ってください)..ユーザー名またはニックネームとして「ジョン」を含む行を選択または一致させたい...どうすればこれを達成できますか? 誰かが私に方法を提案できれば、私は本当に幸せです...

ありがとう

4

3 に答える 3

1

QLC を見てください。Learn You Some Erlang に簡単な例があり、こちらのマニュアル ページにもあります。ブール値を使用して、たとえば (疑似コードで) (ユーザー名 == ジョン OR ニックネーム == ジョン) と一致させることができます。

于 2013-05-21T12:16:52.300 に答える
1
-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).
于 2013-05-27T08:47:44.803 に答える
0
select(Q)->
    case mnesia:is_transaction() の
        偽 ->
            F = fun(QH)-> qlc:e(QH) 終わり、
            mnesia:activity(transaction,F,[Q],mnesia_frag);
        true -> qlc:e(Q)
    終わり。

read_by_name_or_nickname(名前)->
    データ = select(qlc:q([X || X <- mnesia:table(users),
        ((X#users.username == Name) orelse (X#users.nickname == Name))])),
    データ。
于 2013-05-23T07:26:50.647 に答える