2011-01-08 4 views
5

У меня есть таблица с более чем 100000 элементами данных, но есть почти 350 пустых строк внутри. Как удалить пустые строки с помощью phpmyadmin? Ручное удаление - утомительная задача.Как удалить пустые строки в Mysql?

+0

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

ответ

24

Общий ответ:

DELETE FROM table_name WHERE some_column = ''; 

или

DELETE FROM table_name WHERE some_column IS NULL; 

См: http://dev.mysql.com/doc/refman/5.0/en/delete.html

Более подробную информацию, когда вы размещаете ваши таблицы ~

Кроме того, убедитесь, что делать! :

SELECT * FROM table_name WHERE some_column = ''; 

перед тем, как вы удалите, чтобы вы могли видеть, какие строки вы удаляете! Я думаю, что в phpMyAdmin вы даже можете просто выбрать, а затем «выбрать все» и удалить, но я не уверен. Это будет довольно быстро и очень безопасно.

3

У меня есть PHP-скрипт, который автоматически удаляет пустые строки на основе типов данных столбцов.

Это позволяет мне определить «пустоту» по-разному для разных типов столбцов.

например.

table 
first_name (varchar) | last_name (varchar) | some_qty (int) | other_qty (decimal) 

DELETE FROM `table` WHERE 
(`first_name` IS NULL OR `first_name` = '') 
AND 
(`last_name` IS NULL OR `last_name` = '') 
AND 
(`some_qty` IS NULL OR `some_qty` = 0) 
AND 
(`other_qty` IS NULL OR `other_qty` = 0) 

Поскольку значения «0» в моей системе бессмысленны, я считаю их пустыми. Но я узнал, что если вы это сделаете (first_name = 0), тогда вы всегда получите правду, потому что строки всегда == 0 в MySQL. Поэтому я подгоняю определение «пустой» к типу данных.

4

Я делаю операцию mysql в командной строке в окнах. И основные запросы:

delete * from table_name where column='' 

и

delete * from table_name where column='NULL' 

не работает. Я не знаю, работает ли он в редакторе sqlcommand. В любом случае:

delete * from table_name where column is NULL 

работает нормально.

1

Эта процедура удаляет любую строку для всех столбцов, которые являются пустыми, игнорируя основной столбец, который может быть установлен как идентификатор. Надеюсь, это поможет вам.

DELIMITER // 
CREATE PROCEDURE DeleteRowsAllColNull(IN tbl VARCHAR(64)) 
BEGIN 
SET @tbl = tbl; 
SET SESSION group_concat_max_len = 1000000; 
SELECT CONCAT('DELETE FROM `',@tbl,'` WHERE ',(REPLACE(group_concat(concat('`',COLUMN_NAME, '` is NULL')),',',' AND ')),';') FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @tbl AND COLUMN_KEY NOT LIKE 'PRI' into @delete_all; 
PREPARE delete_all FROM @delete_all; 
EXECUTE delete_all; 
DEALLOCATE PREPARE delete_all; 
END // 
DELIMITER ; 

Выполните процедуру следующим образом.

CALL DeleteRowsAllColNull('your table'); 
0

Я знаю, что это уже есть ответ и получил клещ, но я написал небольшую функцию для этого, и подумал, что может быть полезным для других людей.

Я вызываю свою функцию с массивом, чтобы я мог использовать ту же функцию для разных таблиц.

$tableArray=array("Address", "Email", "Phone"); //This is the column names 
$this->deleteBlankLines("tableName",$tableArray); 

и здесь есть функция, которая принимает массив и строит Удалить последовательность

private function deleteBlankLines($tablename,$columnArray){ 
    $Where=""; 
    foreach($columnArray as $line): 
     $Where.="(`".$line."`=''||`".$line."` IS NULL) && "; 
    endforeach; 
    $Where = rtrim($Where, '&& '); 
    $query="DELETE FROM `{$tablename}` WHERE ".$Where; 
    $stmt = $this->db->prepare($query); 
    $stmt->execute(); 
} 

Вы можете использовать эту функцию для нескольких таблиц. Вам просто нужно отправить другое имя таблицы и массив, и оно будет работать.

Моя функция проверяет наличие целой строки пустых столбцов или столбцов NULL одновременно. Если вам не нужно его проверять на NULL, вы можете удалить эту часть.

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