100000を超えるデータ要素を含むテーブルがありますが、その中には350近くの空白行があります。 phpmyadminを使用してこの空白行を削除するにはどうすればよいですか?手動で削除するのは面倒な作業です。
一般的な答えは次のとおりです。
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では、選択してから「すべて選択」して削除することもできると思いますが、よくわかりません。これはかなり高速で、非常に安全です。
Windowsのコマンドプロンプトでmysql
操作を実行しています。そして基本的なクエリ:
delete * from table_name where column=''
そして
delete * from table_name where column='NULL'
動作しません。 phpmyadmin
sqlcommandbuilderで機能するかどうかはわかりません。とにかく:
delete * from table_name where column is NULL
正常に動作します。
列のデータ型に基づいて空の行を自動的に削除する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)MySQLでは文字列は常に== 0であるため、常にtrueになります。そこで、「空」の定義をデータ型に合わせて調整します。
この手順では、IDとして設定される可能性のあるプライマリ列を無視して、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');
私はこれがすでに答えられて、ダニを持っていることを知っています、しかし私はこれをするための小さな関数を書きました、そしてそれが他の人々に役立つかもしれないと思いました。
配列を使用して関数を呼び出し、異なるテーブルに同じ関数を使用できるようにします。
$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をチェックする必要がない場合は、その部分を削除できます。