2012-06-18 3 views
0

У меня есть php-скрипт, который загружает файлы csv в базу данных mysql.dedupe mysql table, но игнорировать пустые значения

В базе данных имеется несколько столбцов. Среди этих столбцов - поле «электронная почта». Я написал несколько mysql, которые будут удалять строки, содержащие повторяющиеся значения в столбце электронной почты. Ниже приведен пример 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 без дубликатов писем.

+0

вы можете объяснить лучше? можете ли вы сказать, где, когда и какой результат вы ожидаете? – jcho360

ответ

0

Что-то, как это будет работать для единовременного изменения в, позволяя 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); 
+0

Я получаю эту ошибку, когда я запускаю эти команды sql «ALTER IGNORE test ADD UNIQUE (электронная почта)»; Ошибка # 1064 синтаксиса. Он указывает на значение электронной почты –

+0

К сожалению, 'TABLE' должен быть там, теперь редактируем (BTW: вы работаете над testdb/имеете резервные копии, если он не работает, как вы ожидаете?) – Wrikken

+0

Спасибо за помощь BTW. Однако я получил еще одну ошибку. ALTER IGNORE TABLE test ADD UNEQUE (электронная почта); Ошибка: # 1062 Дублируемая запись 'qwe' для ключевого 'email'. Помните, что эта таблица имеет повторяющиеся значения по электронной почте. поэтому в этом случае «qwe» - это значение обмана, которое я ставлю там. –

Смежные вопросы