Erlang Mnesia-检查表中任一键中的值
我用以下记录创建了一个mnesia表“users”Erlang Mnesia-检查表中任一键中的值,erlang,mnesia,Erlang,Mnesia,我用以下记录创建了一个mnesia表“users” -record(users,{username,nickname,age}) 假设我有如下记录的记忆表 users | username | nickname | age users | John | baddy | 25 users | Monk | John | 26 我有一个与表匹配的名称…(说“John”)…我想选择或匹配以“John”作为用户名或昵称的行…如何实现这一点?如果有人能给我一个建议,
-record(users,{username,nickname,age})
假设我有如下记录的记忆表
users | username | nickname | age
users | John | baddy | 25
users | Monk | John | 26
我有一个与表匹配的名称…(说“John”)…我想选择或匹配以“John”作为用户名或昵称的行…如何实现这一点?如果有人能给我一个建议,我会很高兴
谢谢看看QLC-,或者。您可以使用布尔来匹配,例如(在伪代码中)(用户名==John或昵称==John)
选择(Q)->
案例记忆:是否为
错误->
F=乐趣(QH)->qlc:e(QH)结束,
mnesia:活动(交易,F[Q],mnesia_frag);
正确->qlc:e(Q)
结束。
按姓名或昵称(姓名)阅读-->
Data=select(qlc:q([X | | X)你应该看看这个函数:ets:fun2ms。
select(Q)->
case mnesia:is_transaction() of
false ->
F = fun(QH)-> qlc:e(QH) end,
mnesia:activity(transaction,F,[Q],mnesia_frag);
true -> qlc:e(Q)
end.
read_by_name_or_nickname(Name)->
Data = select(qlc:q([X || X <- mnesia:table(users),
((X#users.username == Name) orelse (X#users.nickname == Name))])),
Data.
-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).