sql >> Database >  >> RDS >> Mysql

MSQL:Hoe de invoer alleen te overschrijven als de nieuwe hoger is? maak anders een nieuw item aan

Ik zou insert .. on duplicate key update ... uitspraak. Zoiets als dit:

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

name kolom moet worden geïndexeerd als unique .

Testscript:

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);

Uitvoer van select * from player :

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



  1. Hoe goed geïndexeerde MySQL-tabellen effectief samen te voegen?

  2. Beste manier om het TEXT-veld uniek te houden in de MySQL-database

  3. Een leaderboard maken, hoe zou ik rang/positie weergeven?

  4. Hoe een JSON-object maken en invoegen met behulp van MySQL-query's?