gpt4 book ai didi

PHP/MySQL 删除重复行并防止将来重复

转载 作者:行者123 更新时间:2023-11-29 07:46:57 27 4
gpt4 key购买 nike

我知道以前有人问过这个问题,但我不是编码员,无法从其他类似的帖子中弄清楚。我花了 5 个多小时试图解决这个问题,但没有成功:( 所以我请求你的帮助。

1) 防止重复

我有一个写入数据库的 PHP 脚本。这是代码:

$sql = "INSERT INTO results (total, size, persq, strip, material, region) 
VALUES ('$total', '$size', '$persq', '$strip', '$material', '$region')";

我想防止基于 TOTAL 和 SIZE 列的重复行。因此,如果新条目与 TOTAL 和 SIZE 中的值匹配,则不要输入新行。

2) 删除重复项

我想从数据库中删除所有现有的重复行,也基于 TOTAL 和 SIZE 列。

如果行在 TOTAL 和 SIZE 中都包含重复项,则删除整行。

我该怎么做?

PS - 我读到可以使用 SQL IGNORE 命令来防止 future 的重复 - 示例(我尝试构建它以适合我的情况:

INSERT IGNORE INTO results ...;

这样的东西有用吗?如果是这样,请帮助我构建它(我是 PHP 和 MySQL 的新手)。

提前非常感谢。

最佳答案

我认为删除重复项的最简单方法是使用 CTAS(创建表作为选择)语句为数据创建临时表。使用group by,您可以删除重复项。 MySQL 足够“智能”,可以从与该组匹配的行之一中为其他字段选择任何值。

/* De-duplicate and copy all the data to a temporary table. */
CREATE TABLE Temp AS
SELECT * FROM results
GROUP BY total, size;

/* Delete all data from your current table. Truncate is faster but more dangerous. */
DELETE FROM results; /* TRUNCATE results; */

/* Insert the de-duplicated data back into your table. */
INSERT INTO results
SELECT * FROM Temp;

/* Drop the temporary table. */
DROP TABLE Temp;

之后,您可以为 total,size 添加唯一约束,以防止出现新的重复项。

ALTER TABLE results 
ADD UNIQUE results_uni_total_size (total, size);

关于PHP/MySQL 删除重复行并防止将来重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27490017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com