【问题标题】:Select a value in complex mnesia table在复杂的记忆表中选择一个值
【发布时间】:2015-08-30 13:25:44
【问题描述】:

我是 Erlang 和 Mnesia 的新手。我在 mnesia 中创建了一个表:

-record(user, {name="", game=""}).
-record(base, {user=#user{}, score=0}).


init() ->
    mnesia:create_schema([node()]),
    mnesia:start(),
    mnesia:create_table(base, [{attributes, record_info(fields, base)}]),
    mnesia:stop().

现在我想选择“游戏”为特定值的所有表基行。我写了这个函数,但是当游戏变量不等于“”时它不起作用。

exec(base, Game) when is_list(Game)->
F = fun() ->
        if
            Game =/= "" ->
                Q = qlc:q([{R#base.user#user.name, R#base.score} || R <- mnesia:table(base), R#base.user#user.game == Game]);
            true ->
                Q = qlc:q([{R#base.user, R#base.score} || R <- mnesia:table(base)])
        end,
        qlc:e(Q)
    end,
{_, Data} = mnesia:transaction(F),
Data;

如何根据需要进行查询?

【问题讨论】:

    标签: erlang mnesia


    【解决方案1】:

    解决了。我改变了我的功能:

    exec(base, Game) when is_list(Game)->
        F = fun() ->
                if
                    Game =/= "" ->
                        Q = qlc:q([{Name, Score} || #base{user={Name, G}, score=Score} <- mnesia:table(base), G == Game]);
                    true ->
                        Q = qlc:q([{R#base.user, R#base.score} || R <- mnesia:table(base)])
                end,
                qlc:e(Q)
            end,
        {_, Data} = mnesia:transaction(F),
        Data;
    

    【讨论】:

    • 那么你的#base.user 不是记录user
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2014-04-21
    相关资源
    最近更新 更多