【问题标题】:Import excel colls to sql将excel colls导入sql
【发布时间】:2017-06-23 07:21:25
【问题描述】:

我希望创建一个脚本来上传 CSV 文件或 xls 并插入到数据库中。到现在为止我已经成功了,但是我想

ID   CODE   CAP1   CAP2   CAP3
1    AA      50     60     70
2    BB      80     90     100
3    AA             120    130

我想做的是将它插入到 mysql 表 tbl_dimensions 中,如下所示:

RECID   DRAFT_IMPORT   CODE   ID    HEADER    VALUE
1          XXXXX       AA      1     CAP1      50
2          XXXXX       AA      1     CAP2      60
3          XXXXX       AA      1     CAP3      70
4          XXXXX       BB      2     CAP1      80
5          XXXXX       BB      2     CAP2      90
6          XXXXX       BB      2     CAP3      100
7          XXXXX       AA      3     CAP1      NULL/0
8          XXXXX       AA      3     CAP2      120
9          XXXXX       AA      3     CAP3      130

基本上不是在 SQL 中创建一个宽表,而是想在表中创建一个列表,但我需要保留项目代码、AA、BB 等。可能多次使用相同的代码,所以我想使用来自 CSV/XLS 的第 nr 行来协调来自 CAP1、CAP2、CAP3 的值。 Cap1,2 3,可以是任何东西,而且每天都在变化,所以我无法为每个将要发生的选项定义足够宽的表格。

非常感谢

【问题讨论】:

  • 你标记了 php ,但没有 php 代码也显示你做了什么
  • 对于 Excel 用户来说似乎是一个很好的数据模型,但您应该考虑在其中存储 CODEID 的附加表,然后您只需要在 tbl_dimensions 中的 ID 并获取CODE 加入 ID。现在您需要阅读CSV 的每一行,并在每个CAP 中插入IDHEADERVALUE,完成后转到下一行。
  • 嗨,迈克,谢谢。我已经设法构建了一个导入脚本,其中包含所有列,问题是您从一个客户转到另一个客户,并且每个客户都有不同的表结构,所以我需要以这种方式记录它们。这也是你的一个很好的建议,但仍然不知道如何转到每个标题,完成后转到下一行。我宁愿只有一张桌子记录所有内容。

标签: php mysql excel csv


【解决方案1】:

我已经设法弄清楚这将与数组一起使用。我还没有排序,但我会把我的代码放在这里,也许你可以帮助我。

<?php
   function csv_to_array($filename='', $delimiter=',') {
    if(!file_exists($filename) || !is_readable($filename))      return
   FALSE;       $header = NULL;     $data = array();    if (($handle =
   fopen($filename, 'r')) !== FALSE)    {       while (($row =
   fgetcsv($handle, 1000, $delimiter)) !== FALSE)       {           if(!$header)
                $header = $row;
                        else
                $data[] = array_combine($header, $row);
                    }       fclose($handle);    }   return $data; } /**  * Example  */ print_r(csv_to_array('example.csv'));

   ?>

我的 csv 文件如下所示:

cod_piesa, lungime, latime, inaltime
gl, 5000,, 150
fd, 3000, 2000, 100

我想做的是像这样插入到一个mysql表中

row = 0
cod_piesa = GL
header = lungime
value = 5000

next one

row = 0
cod_piesa = GL
header = latime
value = NULL

row = 0
cod_piesa = GL
header = inaltime
value = 150

row = 1
cod_piesa = FD..... and so on.

mysql 表被称为 tbl_drafts,它有 Draft_id、row、cod_piesa、header、value 列。 draft_id 是我将生成的临时 ID,比如说 $draft_id=1

插入后,我需要将他重定向到一个新页面,在这里我将比较不同的结果,比如“verification.php”。

非常感谢您的所有回答

暂时我正在使用上传到服务器上的文件,但我需要有一个手动上传选项,访问者可以上传 CSV 或 excel 文件。

我相信如果解决了这将帮助很多人。 我查看了转置选项,但我无法弄清楚。

【讨论】:

  • 这是 print 的输出: Array ( [0] => Array ( [cod_piesa] => gl [ lungime] => 5000 [ latime] => [inaltime] => 150 ) [1 ] => 数组([cod_piesa] => fd [lunime] => 3000 [latime] => 2000 [inaltime] => 100))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
相关资源
最近更新 更多