MSQL: Как перезаписать запись, только если новая выше? еще создать новую запись - PullRequest
0 голосов
/ 06 июня 2011

У меня есть таблица с именем "рекорд", как это:
nameQL ScoreQL
Петр 50

И флеш игра с ИМЯМИ и СЧЕТОМ, экспортированная в PHP с этими именами.

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

  • IF (NAME существует в базе данных (nameQL) AND SCORE> this.name.scoreQL) {Raplace ScoreQL со счетом, где nameQL = NAME}
  • IF (NAME не существует) {Создать новая строка с ИМЯ и ОЦЕНКА)

1 Ответ

5 голосов
/ 06 июня 2011

Я бы использовал оператор 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 |
+------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...