10、获得指定数量的查询结果
mnesia:activity(async_dirty, fun mnesia:select/4, [ Tab, [ { MatchHead, [ Guard ], [ Result ] } ], Limit, read ] )
示例:
11、分页查询
直接上代码:
-module(cursor_server).
-compile(export_all).
-record(obj,{key,value}).
-include_lib("stdlib/include/qlc.hrl").
make_cursor()->
QD=qlc:sort(mnesia:table(obj,[{traverse,select}])),
mnesia:activity(async_dirty,fun()->qlc:cursor(QD) end,mnesia_frag).
get_next(Cursor)->
Get=fun()->qlc:next_answers(Cursor,5) end,
mnesia:activity(async_dirty,Get,mnesia_frag).
del_cursor(Cursor)->
qlc:delete_cursor(Cursor).
myCursor()->
Q=qlc:q([X||X<-mnesia:table(obj)]),
mnesia:activity(async_dirty,
fun()->qlc:cursor(Q,[]) end,
mnesia_frag).
myNext(Cursor)->
Get=fun()->
qlc:next_answers(Cursor,5)
end,
mnesia:activity(async_dirty,Get,mnesia_frag).
执行结果:
现在从数据库里选择,约束条件是key的值小于50.
myCursor()->
Q=qlc:q([X||X<-mnesia:table(obj),
X#obj.key<50]),
mnesia:activity(async_dirty,
fun()->qlc:cursor(Q,[]) end,
mnesia_frag).
myNext(Cursor)->
Get=fun()->
qlc:next_answers(Cursor,5)
end,
mnesia:activity(async_dirty,Get,mnesia_frag).
执行结果:
现在添加对选取的数据进行排序的功能:
yCursor()->
Q1=qlc:q([X||X<-mnesia:table(obj),
X#obj.key<50]),
Q2=qlc:keysort(2,Q1,[{order,ascending}]),
mnesia:activity(async_dirty,
fun()->qlc:cursor(Q2,[]) end,
mnesia_frag).
myNext(Cursor)->
Get=fun()->
qlc:next_answers(Cursor,5)
end,
mnesia:activity(async_dirty,Get,mnesia_frag).
执行结果: