嗨有沒有可能向mnesia發出不同的選擇請求?Erlang - Mnesia - 相當於「從表中選擇不同的ID」
我可以複製一張表的內容到ets,因爲ets是一個哈希表,它可以工作。但我認爲這可能是一個更優雅的解決方案。
謝謝。
嗨有沒有可能向mnesia發出不同的選擇請求?Erlang - Mnesia - 相當於「從表中選擇不同的ID」
我可以複製一張表的內容到ets,因爲ets是一個哈希表,它可以工作。但我認爲這可能是一個更優雅的解決方案。
謝謝。
我不確定這是您的想法,但您可以使用QLC的{unique,true}選項(請參閱QLC documentation瞭解更多信息)。
我用bag語義創建了一個mnesia表,名爲test,用bag語義。每行由表名稱,關鍵字和值的,所以我的行看起來像:
1. test, 1, 1
2. test, 2, 1
3. test, 2, 2
4. test, 3, 1
5. test, 3, 2
6. test, 3, 3
... etc.
那麼這個簡單的模塊說明我的做法。請注意,您必須包含qlc庫,在我的示例中,我選擇了不同的Keys。
-module(test).
-export([select_distinct/0]).
-include_lib("stdlib/include/qlc.hrl").
select_distinct()->
QH = qlc:q([K || {_TName, K, _V} <- mnesia:table(test)], {unique, true}),
F = fun() -> qlc:eval(QH) end,
{atomic, Result} = mnesia:transaction(F),
Result.
編譯和運行
> c("/home/jim/test", [{outdir, "/home/jim/"}]).
> test:select_distinct().
> [4,1,2,3,5]
,如果你想進行排序,然後輸出使用QH以下版本= ...線以上
QH = qlc:sort(qlc:q([K || {_TName, K, _V} <- mnesia:table(test)], {unique, true})),
如果您想選擇不同的值,以下將起作用:
QH = qlc:sort(qlc:q([V || {_TName, _K, V} <- mnesia:table(test)], {unique, true})),
同樣,代碼只是爲了說明一種方法
對於鍵,你可以用得到的唯一鍵的列表:
mnesia:all_keys(Table).
從我的測試中,換袋它產生的唯一鍵的列表。