Как удалить пустые строки в Mysql? - PullRequest
8 голосов
/ 08 января 2011

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

Ответы [ 5 ]

30 голосов
/ 08 января 2011

Общий ответ:

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 вы можете даже просто выбрать, а затем «выбрать все» и удалить, но я не уверен. Это было бы довольно быстро и очень безопасно.

5 голосов
/ 30 августа 2013

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

delete * from table_name where column=''

и

delete * from table_name where column='NULL'

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

delete * from table_name where column is NULL 

отлично работает.

3 голосов
/ 01 июня 2013

У меня есть 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), то вы всегда получите true, потому что в MySQL строки всегда == 0 Поэтому я адаптирую определение «пустой» к типу данных.

2 голосов
/ 14 февраля 2016

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

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');
1 голос
/ 13 июля 2017

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

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

$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, вы можете удалить эту часть.

...