如何复制mysql行但保持最大视图

时间:2014-08-09 14:08:49

标签: mysql duplicates

我有像这样的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

因为此记录是最大视图而其他记录是重复的

2 个答案:

答案 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