このディレクトリの索引 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)).