Php CSV文件和数据库
以下是我的CSV文件示例: Name | USD ------------ Ifone | 500 Ufone | 600 然后(如何)在创建的表中存储从第二行开始的元素,依此类推。请让我知道什么是一个适当的方式来做到这一点 谢谢 我使用以下函数从csv文件中获取数据:Php CSV文件和数据库,php,mysql,csv,Php,Mysql,Csv,以下是我的CSV文件示例: Name | USD ------------ Ifone | 500 Ufone | 600 然后(如何)在创建的表中存储从第二行开始的元素,依此类推。请让我知道什么是一个适当的方式来做到这一点 谢谢 我使用以下函数从csv文件中获取数据: $row = 1; if (($handle = fopen("mycsv.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !
$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);
}
$row=1;
if($handle=fopen(“mycsv.csv”,“r”)!==FALSE){
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
$num=计数($data);
echo“$num字段位于第$row行:
\n”;
$row++;
对于($c=0;$c<$num;$c++){
echo$data[$c]。“
\n”;
}
}
fclose($handle);
}
更好的方法是:
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)...
而不是简单地将放入表中
有关的详细信息。是否有问题?遇到错误或问题?不要自动创建表。永远不要导入不知道其格式的数据。一旦你意识到这一点,mysql就可以直接导入csv数据:这个问题有用吗@MarcB实际上,我真正的任务是根据asc顺序中的最低成本比较两个csv文件,因此我认为最好将csv文件存储到我的数据库中,并通过sql查询过滤结果。否。将数据放入真实数据库是最好的方法,即使只是短期的。csv文件使用“任意”方法(如筛选/查询)效率极低。好的,当前解决方案正在转储所有行,现在最后一个问题是,假设.csv文件中有6个列,我只想转储数据库表中的三个相应列,在这种情况下,我该如何做?
...INTO TABLE fones (model, cost, @ignore, stock, @ignore, @ignore)...