2011-01-08 26 views
5

Tengo una tabla con más de 100000 elementos de datos, pero hay casi 350 filas en blanco dentro. ¿Cómo elimino estas filas en blanco usando phpmyadmin? La eliminación manual es una tarea tediosa.¿Cómo elimino las filas en blanco en Mysql?

+0

¿Podría publicar la estructura de la tabla, y también qué campo (s) debe estar en blanco para que el registro completo se considere en blanco? –

Respuesta

24

La respuesta general es:

DELETE FROM table_name WHERE some_column = ''; 

o

DELETE FROM table_name WHERE some_column IS NULL; 

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

Más información al publicar sus tablas ~

Además, asegúrese de que hacer! :

SELECT * FROM table_name WHERE some_column = ''; 

antes de eliminar, para que pueda ver qué filas está eliminando. Creo que en phpMyAdmin puedes simplemente hacer la selección y luego "seleccionar todo" y eliminar, pero no estoy seguro. Esto sería bastante rápido y muy seguro.

3

Tengo un script PHP que elimina automáticamente las filas vacías en función de los tipos de datos de columna.

Eso me permite definir "vacío" de manera diferente para diferentes tipos de columnas.

p. Ej.

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) 

Dado que los valores "0" no tienen sentido en mi sistema, los cuento como vacíos. Pero descubrí que si lo haces (first_name = 0), siempre serás cierto, porque las cadenas siempre == 0 en MySQL. Así que adapto la definición de "vacío" al tipo de datos.

4

Estoy haciendo la operación mysql en el símbolo del sistema en Windows. Y las consultas básicas:

delete * from table_name where column='' 

y

delete * from table_name where column='NULL' 

no funciona. No sé si funciona en phpmyadmin sqlcommand builder. De todos modos:

delete * from table_name where column is NULL 

funciona bien.

1

Este procedimiento eliminará cualquier fila para todas las columnas que son nulas, ignorando la columna principal que se puede establecer como una ID. Espero que te ayude.

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 ; 

ejecutar el procedimiento como este.

CALL DeleteRowsAllColNull('your table'); 
0

sé que esto ya ha sido contestada y tiene una garrapata, pero me escribió una pequeña función para hacer esto, y pensé que podría ser útil para otras personas.

Llamo a mi función con una matriz para que pueda usar la misma función para diferentes tablas.

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

y aquí es la función que toma la matriz y construye la cadena de eliminación

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(); 
} 

Puede utilizar esta función para varias tablas. Solo necesita enviar un nombre de tabla y una matriz diferentes y funcionará.

Mi función verificará toda una fila de columnas vacías o columnas NULL al mismo tiempo. Si no lo necesita para verificar NULL, puede eliminar esa parte.

Cuestiones relacionadas