Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除所有不重复的行,但保留一行_Php_Mysql_Sql_Sql Delete_Delete Row - Fatal编程技术网

Php 删除所有不重复的行,但保留一行

Php 删除所有不重复的行,但保留一行,php,mysql,sql,sql-delete,delete-row,Php,Mysql,Sql,Sql Delete,Delete Row,在MySQL中,我有这样一个表 book | user | phone 445 a 69 445 g 75 445 e 22 445 l 55 332 w 57 332 u 34 332 v 87 881 o 49 我想删除包含书445和书332的所有行,并在末尾随机保留其中一行 因此,这张桌子将成为 book | user | phone 445

在MySQL中,我有这样一个表

book | user | phone
445    a       69
445    g       75
445    e       22
445    l       55
332    w       57
332    u       34
332    v       87
881    o       49
我想删除包含书445和书332的所有行,并在末尾随机保留其中一行

因此,这张桌子将成为

book | user | phone
445    l       55
332    w       57
881    o       49
如何在SQL中实现这一点?我使用phyMyAdmin和PHP5.6

谢谢

在MySQL中,您可以使用join。假设用户对于给定书籍是唯一的:

delete t
    from t join
         (select book, max(user) as maxuser
          from t
          group by book
         ) tt
         where t.book = tt.book and t.user < tt.maxuser;
假设用户是唯一的:

DELETE t1 FROM `table` t1, `table` t2 WHERE t1.user > t2.user AND t1.book = t2.book
将>更改为现在开始:

DELETE FROM table1 t1, table1 t2 WHERE t1.user > t2.user AND t1.book = t2.book

将表1替换为实际的表名

对sagi comment进行简单的更改可以帮助您轻松完成以下任务:

DELETE FROM `YourTable`
        WHERE (`book`,`user`) NOT IN
                (SELECT * FROM (SELECT `book`,MAX(`user`) as id from `YourTable` GROUP BY `book`) as temp)

什么逻辑决定了445,保留的是l而不是445,a/g/e?@AlexK。没什么。这是随机的。就留一个吧。谢谢这是我答案的精确副本是真的。我的是提前2分钟;但我想这是常识。没有伤害,没有犯规-@不,是的!可能是当时我正在打答案,没有意识到。你想让我收回我的答案吗?@Fakhruddinojjainwala对不起,什么是表1 t1,表1 t2?我想表1是我的表的名字,但是t1,t2,它们来自哪里?它们是用于在执行查询时传递数据的虚拟表吗?谢谢,这是桌子的别名,请用表1代替表1。对不起,我想t是我桌子的名称,对吗?那么,tt是什么?谢谢