このディレクトリの索引
http://pc11.2ch.net/test/read.cgi/db/1252492296/908
#  MySQL 5.1 
#   
#  TEAMが1 で、 
#  NAMEにaを含むデータを上位にして、 
#  SCOREの多い順に取り出したいのですが、 
#  どう書けばいいですか?お願いします。 
#   
#  これを 
#  ID|TEAM|NAME|SCORE  
#  --+----+----+-----  
#  1 | 1  | aaa | 200 
#  2 | 2  | abb | 50 
#  3 | 1  | ccc | 300 
#  4 | 1  | daa | 400 
#  5 | 1  | eae | 100 
#  6 | 1  | fff  | 800 
#   
#  ↓こうしたい 
#  ID|TEAM|NAME|SCORE  
#  --+----+----+-----  
#  4 | 1  | daa | 400 
#  1 | 1  | aaa | 200 
#  5 | 1  | eae | 100 
#  6 | 1  | fff  | 800 
#  3 | 1  | ccc | 300 
#   

'TEAMが1でSCOREの多い順に取り出したい'(_SCOREの多い順ならび) :-
      'TEAMが1でNAMEにaを含むデータを上位にして'(_aを含む鍵付きデータ,_aを含まない鍵付きデータ),
      'SCOREの多い順に取り出したい'(_aを含む鍵付きデータ,_aを含まない鍵付きデータ,_SCOREの多い順ならび),!.

'SCOREの多い順に取り出したい'(_aを含む鍵付きデータ,_aを含まない鍵付きデータ,_SCOREの多い順ならび) :-
      降順整列(_aを含む鍵付きデータ,_降順に整列したaを含む鍵付きデータ),
      降順整列(_aを含まない鍵付きデータ,_降順に整列したaを含まない鍵付きデータ),
      鍵を除去しながら結合する(_降順に整列したaを含む鍵付きデータ,_降順に整列したaを含まない鍵付きデータ,_SCOREの多い順ならび).

'TEAMが1でNAMEにaを含むデータを上位にして'(_aを含む鍵付きデータ,_aを含まない鍵付きデータ) :-
      findall([SCORE,ID,1,NAME,SCORE],(テーブル(ID,1,NAME,SCORE),'NAMEにaを含む(NAME)),_aを含む鍵付きデータ),
      findall([SCORE,ID,1,NAME,SCORE],(テーブル(ID,1,NAME,SCORE),\+('NAMEにaを含む'(NAME))),_aを含まない鍵付きデータ),!.

'NAMEにaを含む'(NAME) :- sub_atom(NAME,_,1,_,a),!.

鍵を除去しながら結合する([],[],[]) :- !.
鍵を除去しながら結合する([],Y,X) :- 鍵を除去しながら結合する(Y,[],X),!.
鍵を除去しながら結合する([[_|L]|R1],Y,[L|Z]) :- 鍵を除去しながら結合する(R1,Y,Z).