MSQL: как перезаписать запись, только если новая выше? еще создать новую запись

У меня есть таблица с именем «highscore»:
nameQL scoreQL
piotr 50

И флеш-игра с NAME и SCORE экспортируется на PHP с этими именами.

Как это сделать в файле PHP:

  • IF (NAME существует в базе данных (nameQL) И SCORE> this.name.scoreQL) {Raplace scoreQL с SCORE WHERE nameQL = NAME}
  • IF (NAME не существует) {Создать новую строку с помощью NAME и SCORE)

Я бы использовал insert .. on duplicate key update ... Что-то вроде этого:

 insert into highscore set name = :name, score = :new_score on duplicate key update score = greatest(score, :new_score) 

столбец name должен быть проиндексирован как unique .

Тестовый скрипт:

 create table player ( name varchar(32) primary key, score int not null default 0 ); -- create new players insert into player set name = 'foo', score = 100 on duplicate key update score = greatest(score, 100); insert into player set name = 'bar', score = 100 on duplicate key update score = greatest(score, 100); insert into player set name = 'baz', score = 100 on duplicate key update score = greatest(score, 100); -- update score of existing player insert into player set name = 'bar', score = 200 on duplicate key update score = greatest(score, 200); 

Вывод select * from player :

 +------+-------+ | name | score | +------+-------+ | bar | 200 | | baz | 100 | | foo | 100 | +------+-------+