PHP-mySQL如果行中有两个值,则选择duplicates并删除其中一个

PHP-mySQL如果行中有两个值,则选择duplicates并删除其中一个,php,mysql,sql,Php,Mysql,Sql,假设你有一张这样的桌子 users_cities_relations |--id--|name|c-id| |----------------| | 1 |Tom | 2 | | 2 |Mike| 3 | | 3 |Eve | 2 | | 4 |Tom | 2 | 如您所见,用户Tom使用相同的c-id存在2次 现在我要做的是删除其中一行 我在想这样的事情: SELECT id FROM users u1, users u2 WHERE u1.name = u

假设你有一张这样的桌子

users_cities_relations

|--id--|name|c-id|
|----------------|
|  1   |Tom | 2  |
|  2   |Mike| 3  |
|  3   |Eve | 2  |
|  4   |Tom | 2  |
如您所见,用户Tom使用相同的c-id存在2次

现在我要做的是删除其中一行

我在想这样的事情:

SELECT id FROM users u1, users u2
WHERE u1.name = u2.name
AND u1.c-id = u2.c-id;
然后用不同的语句删除它

很遗憾,这并没有返回我所需要的,如果我没记错的话,它返回了所有的id。

试试这种方法

Delete u from users_c u , (
select max(id) as id, name, c_id
from users_c
group by name, c_id
having count(id) > 1)  as temp
where  u.id = temp.id and u.name = temp.name and u.c_id = temp.c_id;
或ith temp表格以删除重复记录

CREATE TEMPORARY TABLE temp_users(
id  int,
name  varchar(40),
c_id int

);

insert into temp_users
select max(id), name, c_id
from users_c
group by name, c_id
having count(id) > 1;

select * from users_c;
select * from temp_users;

delete u from users_c u, temp_users temp 
where  u.id = temp.id and u.name = temp.name and u.c_id = temp.c_id;

drop temporary table temp_users;

可能重复这是不重复的,所有其他帖子检查一个相同的值,这是检查两个相同的值。那么?基本概念保持不变。查找重复项,删除除一个之外的所有重复项。仅仅因为你有两个需要检查的值,并不能神奇地使它有任何不同。如果你这样开始,你可以去标记所有的帖子,尽可能地重复没有,但它确实可以归结为大量的问题,假装它们因为小细节而不同。如果这是一个烹饪网站,我们是否应该有两种不同的圣诞饼干食谱,因为一种是红色的食用色素,另一种是红色的?