我有像这样的MySQL行
id | title | desc | view
1 | i'm a title | i'm a desc | 0
2 | i'm a title | i'm a desc | 0
3 | i'm a title | i'm a desc | 5
4 | i'm a title | i'm a desc | 0
5 | i'm a title | i'm a desc | 0
6 | i'm a title | i'm a desc | 3
8 | i'm a title | i'm a desc | 0
我只想保留
3 | i'm a title | i'm a desc | 5
因为此记录是最大视图而其他记录是重复的
答案 0 :(得分:1)
如果您的数据不是太大,可以像这样使用delete
:
delete t from yourtable t join
(select title, `desc`, max(view) as maxview
from yourtable t
group by title, `desc`
) tt
on t.title = tt.title and
t.`desc` = tt.`desc` and
t.view < tt.maxview;
注意:如果有多个行具有相同的最大视图数,则会保留所有这些行。此外,desc
是列的糟糕名称,因为它是SQL(和MySQL)保留字。
编辑:
如果您有大量数据,通常会更快地执行truncate
/ re - insert
方法:
create table temp_t as
select t.*
from yourtable t join
(select title, `desc`, max(view) as maxview
from yourtable t
group by title, `desc`
) tt
on t.title = tt.title and
t.`desc` = tt.`desc` and
t.view = tt.maxview;
truncate table yourtable;
insert into yourtable
select *
from temp_t;
答案 1 :(得分:0)
我无法理解具体问题是什么。遵循可能的解决方案......
1)在mysql中使用UPDATE
而不是INSERT
语句。只需写下UPDATE your_table_name SET view=view+1
2)或者如果使用php删除具有较低值的重复行,则可以运行cron作业
3)如果需要INSERT
,那么您应该ON DUPLICATE KEY UPDATE
。请参阅文档 * http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html