このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1299305530/288
#  sqlite v3.6.23.1で、 
#  comment (text) ,postedtime (int) という形式にて掲示板を作っているのですが、 
#  「最新の5コメント、但し、24時間以内の投稿については最大50個まで」を求めたくて 
#   
#  SELECT comment FROM mm ORDER BY postedtime DESC LIMIT 50 
#  UNION 
#  SELECT comment FROM mm WHERE postedtime  > $nowtime - 3600*24 ORDER BY ptime DESC LIMIT 50 
#   
#  としてみたのですが($nowtimeには今の時間を入れてます)、 
#  1st ORDER BY term does not match in the result set というエラーが出ます。 
#  (union前後のクエリそれぞれ単独ではエラーは出ません) 
#   
#  欲しい結果を求めるにはどのように書けばいいのでしょうか? 
# 
# 

'最新の5コメント、但し、24時間以内の投稿については最大50個まで'(_テーブル,_現在の時刻,P) :-
        split(_現在の時刻,['/','-',':','.'],[_年,_月,_日,_時,_分,_秒,_]),
        テーブル構造(_テーブル,時刻,N),
        findmax(M,テーブル構造(_テーブル,_,M),Max),
        length(L1,Max),
        nth1(N,L1,_時刻),
        P =.. [_テーブル|L1],
        選択(P,_年,_月,_日,_時,_分,_秒,L),
        append(_,[_時刻|_],L),
        call(P).

選択(P,_年,_月,_日,_時,_分,_秒,L) :-
        findsetof(_時刻,(
                    call(P),
                    時刻が24時間以内(_年,_月,_日,_時,_分,_秒,_時刻)),
                L1),
        要素切り取り(L1,L),!.
選択(P,_年,_月,_日,_時,_分,_秒,L) :-
        findall(_時刻,(
                    call(P),
                    時刻が24時間以内(_年,_月,_日,_時,_分,_秒,_時刻)),
                L1),
        整列(L1,L2),
        要素切り取り(L2,L),!.
選択(P,_,_,_,_,_,_,L) :-
        findall(_時刻,(
                    call(P)),
                L1),
        整列(L1,L2),
        length(L,5),
        append(_,L,L2),!.

要素切り取り(L1,L) :-
        length(L1,Length),
        Length >= 50,
        length(L,50),
        append(_,L,L1),!.
要素切り取り(L1,L1) :-
        length(L1,Length),
        Length >= 5,
        length < 50,!.

時刻が24時間以内(_年,12,31,_時,_分,_秒,_時刻) :-
        split(_時刻,['/','-',':','.'],[_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),
        _年_1 is _年 + 1,
        [_年_1,1,1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!.

時刻が24時間以内(_年,2,29,_時,_分,_秒,_時刻) :-
        うるう年(_年),
        [_年,3,1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!.

時刻が24時間以内(_年,2,28,_時,_分,_秒,_時刻) :-
        \+(うるう年(_年)),
        [_年,3,1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!.

時刻が24時間以内(_年,_月,30,_時,_分,_秒,_時刻) :-
        append(_,[_月|_],[4,6,9,11]),
        _月_1 is _月 + 1,
        [_年,_月_1,1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!.

時刻が24時間以内(_年,_月,31,_時,_分,_秒,_時刻) :-
        append(_,[_月|_],[1,3,5,7,8,10]),
        _月_1 is _月 + 1,
        [_年,_月_1,1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!.

時刻が24時間以内(_年,_月,_日,_時,_分,_秒,_時刻) :-
        split(_時刻,['/','-',':','.'],[_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),
        _日_1 is _日 + 1,
        [_年,_月,_日_1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!.

うるう年(_年文字列) :-
        atom(_年文字列),
        atom_to_term(_年文字列,_年整数,_),
        !,
        うるう年(_年整数) .
うるう年(_年) :-
        0 is _年 mod 400,!.
うるう年(_年) :-
        0 is _年 mod 100,
        !,
        fail.
うるう年(_年) :-
        0 is _年 mod 4,!.
うるう年(_年) :-
        \+(0 is _年 mod 4),
        fail.