【问题标题】:dedupe mysql table but ignore empty values对 mysql 表进行重复数据删除但忽略空值
【发布时间】:2012-06-20 16:54:20
【问题描述】:

我有一个将 csv 文件上传到 mysql 数据库的 php 脚本。

数据库有几列。这些列中有一个“电子邮件”字段。我写了一些 mysql 来删除 email 列中包含重复值的行。下面是mysql:

 $sql = "CREATE TABLE new_table as SELECT * FROM auto WHERE 1 GROUP BY email";

mysql_query($sql, $conn);

$query = mysql_query("SELECT COUNT(*) FROM new_table");
list($number) = mysql_fetch_row($query);

$query = mysql_query("SELECT COUNT(*) FROM auto");
list($number2) = mysql_fetch_row($query);
$result = $number2 - $number;
mysql_query("DROP TABLE auto");
mysql_query("RENAME TABLE new_table TO auto");

代码有效,它删除了重复值。

问题:

它会删除不包含值的行。因此它假定两个或多个空的电子邮件值是重复的,并删除它们是行。

问题:

我如何告诉 mysql 忽略空值。

感谢您的帮助。

编辑

我的数据库表在哪里。一张桌子。 什么时候是我执行代码的时候。我计划放入一个 php 文件以按需执行。 我期望的结果是一个没有重复电子邮件的 mysql 表。

【问题讨论】:

  • 你能解释得更好吗?您能说出您期望的结果是什么地方、时间和结果吗?

标签: php mysql


【解决方案1】:

通过在电子邮件中允许 NULL 并添加 UNIQUE 约束,这样的方法可以用于一次性更改:

-- set empties to NULL
UPDATE tablename SET email = NULL WHERE LENGTH(email)=0;
-- drop all rows violating the UNIQUE constraint on email:
ALTER IGNORE TABLE tablename ADD UNIQUE (email);

【讨论】:

  • 当我运行这些 sql 命令“ALTER IGNORE test ADD UNIQUE (email);”时出现此错误错误 #1064 语法。它指向电子邮件值
  • 哎呀,TABLE 应该在里面,现在正在编辑(顺便说一句:你正在处理一个 testdb/有备份,以防它不能像你期望的那样工作?)
  • 感谢您的帮助顺便说一句。我得到了另一个错误。 ALTER IGNORE TABLE 测试添加唯一(电子邮件);错误:#1062 密钥“电子邮件”的重复条目“qwe”。请记住,此表在电子邮件下具有重复值。所以在这种情况下,'qwe' 是我放在那里的欺骗值。
  • 嗯,IGNORE 部分可以忽略该错误(即:丢弃违反的行),另请参阅dev.mysql.com/doc/refman/5.1/en/alter-table.html 的“使用说明”中的第二条评论。你确定那些是错误而不是警告?可能与服务器所处的模式有关,尽管我不知道是什么。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 2016-08-29
  • 2011-04-21
相关资源
最近更新 更多