このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1343899481/952
#  MySQLについての質問です。 
#   
#  highscoreというテーブルに、id, scoreという2つのカラムがあります。 
#  idのインデックスはPRIMARYです。 
#   
#  POSTでidとscoreの値が送られてきたとき、 
#  そのidが既に登録されている場合、送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し、 
#  送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたいのですが、 
#  条件分岐の部分でどのようなSQLを書けばよいのか検討がつきません。 
#   
#  何かヒントをいただければ幸いです。よろしくお願いします。 
# 
# 

:- dynamic(highscore/2).


'highscoreというテーブルに、id, scoreという2つのカラムがあります。
idのインデックスはPRIMARYです。
POSTでidとscoreの値が送られてきたとき、
そのidが既に登録されている場合、
送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し、
送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score) :-
        'そのidが既に登録されている場合、
送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し、
送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score).


'そのidが既に登録されている場合、
送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し、
送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score) :-
        'そのidが既に登録されている場合、
送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し'(_id,_score).

'そのidが既に登録されている場合、
送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し、
送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score) :-
        '送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score).


'そのidが既に登録されている場合、
送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し'(_id,_score) :-
        'そのidが既に登録されている場合'(_id),
        '送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し'(_id,_score).


'送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score) :-
        '送られてきたidがまだテーブルに存在しなければ'(_id),
        '新規レコードとしてINSERTしたい'(_id,_score).


'そのidが既に登録されている場合'(_id) :-
        highscore(_id,_).


'送られてきたidがまだテーブルに存在しなければ'(_id) :-
        \+(highscore(_id,_)).


'送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し'(_id,_score) :-
        '送られてきたscoreが登録されているscoreより大きければ'(_id,_score),
        'そのidのscoreを更新し'(_id,_score).

'送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し'(_,_).


'送られてきたscoreが登録されているscoreより大きければ'(_id,_score) :-
        highscore(_id,_score_1),
        _score @> _score_1.


'そのidのscoreを更新し'(_id,_score) :-
        retract(highscore(_id,_)),
        assertz(highscore(_id,_score)),!.


'新規レコードとしてINSERTしたい'(_id,_score) :-
        assertz(highscore(_id,_score)).