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

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

 Spiny Norman08 янв. 2011 г., 10:58
Не могли бы вы опубликовать структуру таблицы, а также какие поля должны быть пустыми, чтобы полная запись считалась пустой?
 shev7211 авг. 2018 г., 15:25
Ответы @StWilson и Thomas Williams дают наиболее общие решения и должны были быть приняты. Колючий Норман: комментарий актуален! вопрос, кажется, запрашивает «пустые строки». Принятый ответ и NCA обрабатывают только случай с 1 пустым столбцом. Более общее решение является более сложным. Решение БД от STWilson - определенно мой предпочтительный выбор для этой проблемы!

Ответы на вопрос(5)

Я делаю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 

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

 shev7211 авг. 2018 г., 15:21
Из вопроса кажется, что нас интересует «пустая строка», она удаляется только тогда, когда один из столбцов в строке пуст.
Решение Вопроса

Общий ответ:

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

 shev7211 авг. 2018 г., 15:21
Из вопроса кажется, что нас интересует «пустая строка», она удаляется только тогда, когда один из столбцов в строке пуст.

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

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

например

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. Поэтому я адаптирую определение «пустой» к типу данных.

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

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

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

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

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');

Ваш ответ на вопрос