Wordpress,从csv格式的txt文件插入表格行

时间:2018-12-18 20:46:39

标签: php mysql sql wordpress

当前正在使用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!)

0 个答案:

没有答案