2016-05-02 6 views
0

У меня есть данные файла CSV, импортируемые в таблицу mysql. То, что мне нравится делать каждый раз, когда я запускаю код, я бы хотел DROP весь столбец и данные и ЗАМЕНИТЬ его обновленным содержимым .csv.Удаление столбцов из таблицы

$affectedRows = $pdo->exec(" 
    //HERE I do need additional code to drop column data from $databasetable similar to following 
    /*------------------------------------------*/ 
    DROP TABLE IF EXISTS '$databasetable' 

    CREATE TABLE IF NOT EXISTS `$databasetable` (
      Column names1 
      Column name 2 
      . 
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
    /*------------------------------------------*/ 


    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable` 
    FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)." 
    LINES TERMINATED BY ".$pdo->quote($lineseparator)); 
+1

Я немного смущает то, что вы спрашиваете здесь. Как правило, использование DROP в отношении столбца означает удаление столбца из таблицы. Кроме того, есть ли в этой таблице столбцы данных, которые вы хотите сохранить? Это тоже изменит ответ. –

+2

Позвольте мне подробнее остановиться на этом. Если вы хотите сохранить структуру таблицы (сохранить все столбцы), но избавиться от данных, команда «TRUNCATE {tablename}» будет работать. Если вам нужно полностью избавиться от столбца (так как в этом столбце больше нет в этой таблице), это будет «ALTER TABLE {tablename} DROP COLUMN {columnname}". По крайней мере, так оно и делается в MYSQL. –

+0

P. Gearman Спасибо за ответ. Прошу прощения за то, что я не совсем понял вопрос. Я просто хочу удалить $ databasetable content каждый раз, когда выполняется этот скрипт (Столбцы и строки в этой таблице. – CyberFla

ответ

1

Я думаю, что вы хотите сделать, это TRUNCATE Таблица в вопросе. То есть удалить все данные внутри таблицы, но не удалить сам стол, правильно? Итак, вот один совет:

<?php 
    //FIRST TRUNCATE (REMOVE OLD DATA IN THE TABLE $databasetable 
    $stmt  = $db->prepare("TRUNCATE TABLE {$databasetable}"); 
    $tblEmpty = $stmt->execute(); 

    //NOW, ONCE THE TABLE'S BEEN TRUNCATED; YOU MAY CONTINUE WITH THE NEW "INSERTS"... 
    if($tblEmpty){ 
     // INSERT THE DATA FROM THE CSV... 
    } 

    //... 
    //... 
    // MORE CODE HERE... 
+0

Пуаз, Да на ваш вопрос. Я хочу сохранить таблицу, но удалить все данные внутри. Исправьте меня, если я ошибаюсь: Truncate только удаляет данные, а не имена столбцов правильно? – CyberFla

+0

Точно ... Truncate будет просто удалять записи (данные), но никогда не будет вмешиваться в определение таблицы (имена столбцов и т. Д.). Однако, если вы обрезаете таблицу с автоматическим увеличением; значение Auto-Incremented Field/Column не станет 0 или 1. Поле Auto-Incremented Field точно сохраняет свое последнее значение &, и поэтому продолжит оттуда последующие вставки ... – Poiz

0
$affectedRows = $pdo->exec(" 
//HERE I do need additional code to drop column data from $databasetable similar to following 
/*------------------------------------------*/ 
/* I REMOVED THE SINGLE QUOTESFROM $databasetable and I was able to drop the table. Once the table was dropped then I was able to create the $databasetable which solved the problem. 
DROP TABLE IF EXISTS $databasetable; 
CREATE TABLE IF NOT EXISTS `$databasetable` (
     Column names1 
     Column name 2 
     . 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
/*------------------------------------------*/ 


LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable` 
FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)." 
LINES TERMINATED BY ".$pdo->quote($lineseparator)); 
Смежные вопросы