I have a table of scores, which is made of 2 fields: name and high score. Something like this:
-----------------------
| name | score |
-----------------------
| John | 2450 |
-----------------------
| Alice | 2420 |
-----------------------
... etc
I need to delete all the rows till the top 50 scores.
Is it possible without creating another temporary table ?
please try this
delete from scores_tbl Where
id not in
(select * from
(select id from scores_tbl order by score desc limit 50)
as temp)
Create an auto increment field
alter table scores add id int unique auto_increment not null;
This will automatically number your rows in the order of a select query without conditions or order-by
select * scores;
delete from scores where id > 50;
Finally, remove that field
alter table scores drop id;
You need a unique field for this , so either alter the table before and after the delete.
Like :
alter table scores add id int unique auto_increment not null;
delete from scores where id > 50;
alter table drop column id;