2012-01-03 15 views
1

mnesiaから1列のみを選択するにはどうすればよいですか? 私はこのコードでETSテーブルにonle列を選択することができます。mnesiaから1列のみを選択

ets:match(AllData_TableId, {'_', '$1','_',','_'},3), 

私はmnesiaのための同様のものが必要。

ありがとうございます。例では

答えて

1

はこちらをご覧ください:http://en.wikibooks.org/wiki/Erlang_Programming/Using_mnesia、著者は機能mnesia:match_object/1を使用する方法を見て、そして、私たちは私たちのmnesiaデータベースを設計することをお勧めしますが、ここでより多くのhttp://www.erlang.org/doc/man/mnesia.html#match_object-1

それを読んでみおよび/またはこの方法の使用を避けるための方法でテーブルを使用します。これは、記憶装置がテーブル全体を横断して一致するものを探すためです。あなたが必要なもの

は、私はそれを得た

 
-include_lib("stdlib/include/qlc.hrl"). 

select(Q)-> 
    case mnesia:is_transaction() of 
     false -> 
      F = fun(QH)-> qlc:e(QH) end, 
      %% mnesia:transaction(F); 
      mnesia:activity(transaction,F,[Q],mnesia_frag); 
     true -> qlc:e(Q) 
    end. 

-record(book,{title,isbn,price,category}). 

book_title({book,ISBN})-> 
    select(qlc:q([X#book.title || X <- mnesia:table(book),X#book.isbn == ISBN])). 
-1

QLCです。ただ、QLCを使用します。

Transaction = fun() -> 
Query = qlc:q([{Tablename#tablename.columnname} || 
Tablename <- mnesia:table(tablename)]), 
qlc:eval(Query) 
end. 
+0

あなたのコード内のいくつかのミスがあります。モジュール「記憶喪失」が完全に存在しないか、このコードは非常に古くなったerlangバージョンを意味します。 –

+2

失調症は本当に存在していませんでした。管理者はデータベースの「記憶喪失」を呼び出すことを認めなかった。 :-) – rvirding

1

あなたはそのためmnesia:selectを使用することができます。

Spec = [{#tablename{columnname = '$1', _ = '_'}, [], ['$1']}], 
{atomic, Result} = mnesia:transaction(fun() -> mnesia:select(tablename, Spec) end), 
Result. 
関連する問題