0

以下是我的 CSV 文件示例:

姓名 | 美元
------------
万一 | 500
飞碟 | 600

我想读取我的 csv 文件,其中我的 php 脚本读取第一行,然后(如何)根据返回的第一行的元素相应地创建表,就像上面的示例中的行元素一样Name and USD

Create table csv
{
$column1 varchar (50)
$column2 varchar (50)
}

然后(如何)将从第二行开始的元素存储在创建的表中,依此类推。请让我知道什么是合适的方法来做到这一点。

谢谢,

以下函数我用来从我的 csv 文件中获取数据:

$row = 1;
if (($handle = fopen("mycsv.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
4

1 回答 1

2

更好的方法是:

1) 研究 CSV 表格格式并决定字段名称和类型,在您的情况下,例如

fonemodel varchar(50);
cost      integer;      -- or a monetary field

2)从上面的字段手动创建表

CREATE TABLE fones ...

3)直接导入文件:

LOAD DATA LOCAL INFILE '/path/to/mycsv.csv'
INTO TABLE fones
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES

端接和外壳取决于 CSV 结构(您提供的示例实际上是管道分隔的)。

一旦存储了两个表,就可以在适当的数据类型之间进行比较(varchar可能会给您带来麻烦 - 599 可能被认为小于 60,因为字符'5' 在 '6' 之前)

更新

假设真正的 CSV 类似于

 UFone,500,useless data,1234,other useless info,blah blah

并且您只需要模型、成本和库存,即第 1、2 和 4 列。然后您将输入指定为:

 ...INTO TABLE fones (model, cost, @ignore, stock, @ignore, @ignore)...

而不是简单地INTO TABLE.

有关MySQL 手册页的更多信息。

于 2012-11-15T17:12:47.687 回答