В настоящее время работает над плагином WordPress, который позволит вставлять текстовый файл в формате CSV в пользовательскую таблицу в базе данных WordPress.
Ранее я использовал команду для создания таблицы и столбцов с соответствующими типами данных. Это пример таблицы, которую я создаю:
global $gtfs_db_version;
$gtfs_db_version = '1.0';
function routes_install() {
global $wpdb;
global $gtfs_db_version;
$table_name = 'routes_txt';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
route_long_name varchar(80) NOT NULL,
route_type varchar(80),
route_text_color varchar(80),
route_color varchar(80),
agency_id varchar(80),
route_id varchar(80),
route_url varchar(80),
route_short_name varchar(80),
PRIMARY KEY (id)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
add_option( 'gtfs_db_version', $gtfs_db_version );
};
Теперь в команде, где я создаю строки таблицы из txt-файла, есть вероятность, что порядок столбцов будет меняться каждый раз, когда будет доступен новый txt-файл. Это где проблема может возникнуть. Прямо сейчас я должен вручную изменить назначение столбца в команде. Первая строка имеет имена столбцов во время вставки, если это помогает.
function insert_routes(){
global $wpdb;
$path_name = get_option( "routes_txt" );
$table_name = 'routes_txt';
$firstline = array_shift(file($path_name));
$file_array = file($path_name);
$file_line_num = 1;
foreach ($file_array as $file_array_value) {
$number_of_lines = count($file_array); // number of lines in txt file
$file_array_value = preg_replace('/\s/', '', $file_array_value);
//if first line of file that has tables column names
$stringArray = explode(",",$file_array_value);
if($file_line_num == 1){
echo '';
}else{
$route_id = array_values($stringArray)[0];
$route_short_name = array_values($stringArray)[1];
$route_long_name = array_values($stringArray)[2];
$route_type = array_values($stringArray)[3];
$route_url = array_values($stringArray)[4];
$agency_id = array_values($stringArray)[5];
$route_color = array_values($stringArray)[6];
$route_text_color = array_values($stringArray)[7];
//puts everything seperated by a comma in a array
$wpdb->replace(
$table_name,
array(
'id' => $file_line_num,
'route_long_name' => $route_long_name,
'route_type' => $route_type,
'route_text_color' => $route_text_color,
'route_color' => $route_color,
'agency_id' => $agency_id,
'route_id' => $route_id,
'route_url' => $route_url,
'route_short_name' => $route_short_name
)
);
}
$file_line_num++;
}
};
Есть ли способ с помощью команды SQL назначить правильные столбцы для правильных предварительно назначенных столбцов?
РЕДАКТИРОВАТЬ: в соответствии с просьбой, первая пара строк двух разных версий маршрутов rout_txt CSV.
Версия 1
route_long_name, route_type, route_text_color, route_color, agency_id, route_id, route_url, route_short_name
, 3, FFFFFF, 008C9B, NCTD, 318, http://www.gonctd.com/breeze, 318
, 3, FFFFFF, 008C9B, NCTD, 313, http://www.gonctd.com/breeze, 313
Версия 2
route_id, route_short_name, route_long_name, route_type, route_url, agency_id, route_color, route_text_color
301, 101, ,3, http://www.gonctd.com/breeze, NCTD, 008C9B, FFFFFF
302, 302, ,3, http://www.gonctd.com/breeze, NCTD, 008C9B, FFFFFF
И прежде чем вы спросите, попросить людей, ответственных за создание этих CSV, придерживаться последовательной парадигмы колонок, невозможно (я знаю, верно? ARG!)
Задача ещё не решена.
Других решений пока нет …