how to lookup last record in dataset in Mnesia?

hans.bolinder <>
Wed Jun 7 15:29:06 CEST 2006


[Gaspar Chilingarov:]
> I have a table in Mnesia, which I with to filter by some field(s) and
> fetch one record with maximal ID (ie. last inserted).
> 
> (SQL equivalent: SELECT MAX(ID) FROM table WHERE foo_field = 'bar' and
> user_name = 'Alice')
> 
> Are there any fast ways to achieve this in mnesia?

    QH = qlc:q([R#foo.id || 
                     R <- mnesia:table(T),
                     R#foo.foo_field =:= bar, 
                     R#foo.user_name =:= 'Alice']),
    lists:max([0 | qlc:e(QH)]) % assumption: 'id' is an integer > 0

If 'foo_field' or 'user_name' is the key column, or either of them is
indexed, the query is just a lookup. Otherwise the whole table will be
traversed, possibly using select and a match specification.

Best regards,

Hans Bolinder, Erlang/OTP



More information about the erlang-questions mailing list