Php 删除MySQL表中的重复项-当城市id相同时设置组id

Php 删除MySQL表中的重复项-当城市id相同时设置组id,php,mysql,sql,Php,Mysql,Sql,我的数据库中有表单位。在模式中,我有id、unit\u id、group\u id、city\u id 简单来说,我有3个单元: (1, 1, 1, 1) (2, 1, 2, 1) (3, 1, 3, 2) 当城市id相同时,如何删除无用的组id。我有下一个结果: (1, 1, 1, 1) (2, 1, 1, 1) (3, 1, 3, 2) 我知道如何在PHP中实现这一点,但我认为‘也许MySQL有内置函数,我不知道’;) 关于如果我理解正确,您想删除组id和城市id相等的行吗?如果是这样的

我的数据库中有表
单位
。在模式中,我有
id
unit\u id
group\u id
city\u id

简单来说,我有3个单元:

(1, 1, 1, 1)
(2, 1, 2, 1)
(3, 1, 3, 2)
当城市id相同时,如何删除无用的组id。我有下一个结果:

(1, 1, 1, 1)
(2, 1, 1, 1)
(3, 1, 3, 2)
我知道如何在PHP中实现这一点,但我认为‘也许MySQL有内置函数,我不知道’;)


关于如果我理解正确,您想删除
组id
城市id
相等的行吗?如果是这样的话,很简单:

DELETE FROM units WHERE group_id = city_id

如果我正确理解您的问题,您希望所有组id具有来自同一城市id的相同值。基本上,您的第一个表是您所拥有的,第二个表是期望的结果。如果是这种情况,您的查询可能如下所示:

UPDATE table1 
INNER JOIN (SELECT * FROM table1 GROUP BY city_id) AS tx
ON table1.city_id = tx.city_id
SET table1.group_id = tx.group_id;
DELETE table1 FROM table1 
INNER JOIN (SELECT * FROM table1 GROUP BY city_id) AS tx
ON table1.city_id = tx.city_id
WHERE table1.group_id != tx.group_id;
下面是一个例子,看看它是如何工作的

如果要完全删除值并仅保留不同的city_id,则可以使用如下查询:

UPDATE table1 
INNER JOIN (SELECT * FROM table1 GROUP BY city_id) AS tx
ON table1.city_id = tx.city_id
SET table1.group_id = tx.group_id;
DELETE table1 FROM table1 
INNER JOIN (SELECT * FROM table1 GROUP BY city_id) AS tx
ON table1.city_id = tx.city_id
WHERE table1.group_id != tx.group_id;
这是给你的

在这种情况下,结果表将没有id为2的行

德国劳埃德船级社

好的,我的解决方案:

UPDATE `ingame_units` INNER JOIN `ingame_groups` g1 ON `ingame_units`.`group_id`=g1.`id` LEFT JOIN `ingame_groups` g2 ON `ingame_units`.`group_id`<>g2.`id` AND g1.`city_id`=g2.`city_id` AND g1.`id`>g2.`id` AND g1.`game_id`=g2.`game_id` SET `ingame_units`.`group_id`=IFNULL(g2.`id`,g1.`id`)
UPDATE`ingame\u units`internal JOIN`ingame\u groups`g1 ON`ingame\u units`.`id`LEFT JOIN`ingame\u groups`g2 ON`ingame\u units`.`group\u id`g2.`id`和g1.`city\u id`=g2.`id`和g1.`game\u id`=g2.`game\u id`设置ingame\u单元。`group\u id`=IFNULL(g2.`id`,g1.`id`)

谢谢一个人删掉我的帖子,别想帮我。注意:)

MySQLi如何知道值是无用的组id您需要php我想上面3行的预期最终结果是什么?第一排和第三排?您想在单元id、组id和城市id都相同(所有3个相同)或组id和城市id(仅这2个)相同的情况下保留最低id吗?还是最高的身份证?请指定可用的代码、表布局等?这只是简单的代码,从另一个角度看,我认为SQL没有
==
运算符。对于简单组id,它将是3和130,城市id将是13-在这种情况下我将做什么?修复了==输入错误。你能举一个你想要达到的目标的例子吗?预期的结果是什么?