当前正在使用wordpress插件,该插件将以CSV格式将txt文件插入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命令将正确的列分配给正确的预先指定的列?
编辑:根据要求,routes_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!)