안녕하세요, 흉골 질환에 대한 별개의 선택 요청을 할 가능성이 있습니까?Erlang - Mnesia - "Select distinct ID from Table"
ets에 한 테이블의 내용을 복사 할 수 있고 ets가 작동 할 수있는 해시 테이블이기 때문에 가능합니다. 하지만 아마도이 문제에 대한 좀 더 우아한 해결책이 있다고 생각했습니다.
감사합니다.
안녕하세요, 흉골 질환에 대한 별개의 선택 요청을 할 가능성이 있습니까?Erlang - Mnesia - "Select distinct ID from Table"
ets에 한 테이블의 내용을 복사 할 수 있고 ets가 작동 할 수있는 해시 테이블이기 때문에 가능합니다. 하지만 아마도이 문제에 대한 좀 더 우아한 해결책이 있다고 생각했습니다.
감사합니다.
마음에 들었는지 확실하지 않지만 QLC의 {unique, true} 옵션을 사용할 수 있습니다 (자세한 내용은 QLC documentation 참조).
나는 bag semantics가있는 test라는 mnesia 테이블을 만들었습니다. 각 행은 표 이름, 키 및 값으로 구성되어 있으므로 내 행은 다음과 같이 표시됩니다.
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 라이브러리를 포함해야한다는 것에 주목하십시오. 예를 들어, 고유 한 키를 선택하고 있습니다.
-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.
컴파일하고 = 출력이 다음 QH의 다음 버전을 사용하는 분류를 원한다면 당신은 고유 한 값을 선택하고 싶다면
QH = qlc:sort(qlc:q([K || {_TName, K, _V} <- mnesia:table(test)], {unique, true})),
위 ... 라인을
> c("/home/jim/test", [{outdir, "/home/jim/"}]).
> test:select_distinct().
> [4,1,2,3,5]
를 실행 , 다음 작동합니다 :
QH = qlc:sort(qlc:q([V || {_TName, _K, V} <- mnesia:table(test)], {unique, true})),
다시, 코드는 사용하여 고유 키의 목록을 얻을 수 있습니다 키에 대한 접근 방식을
을 설명하기 위해 단지이다 : 그것은 고유 키의 목록을 얻을 수 가방 내 테스트에서
mnesia:all_keys(Table).
는.