【问题标题】:Import text file into database [closed]将文本文件导入数据库[关闭]
【发布时间】:2016-05-24 05:22:56
【问题描述】:

是否可以使用 phpmyadmin 导入文本文件?

文件中是这样的:

country - county / city
USA - Florida / Orlando
USA - Florida / Miami
USA - Washington / Washington DC
Switzerland - Solothurn / Grenchen

文件有3000多行

现在我想导入到我的分类表 表格是这样的:

id | parent_id | name

国家和县在文件中多次出现。在我的数据库中,我只需要一次。 城市在文件中是唯一的

我可以用 phpmyadmin 做这个还是只能用 php 做这个? 谁能告诉我如何做到这一点。 谢谢

【问题讨论】:

  • 您可以使用 fread() 逐行读取文件并分解字符串以获得数据库所需的文件。
  • “美国 - 佛罗里达 / 奥兰多”这一行应该是 3 行,名称为“美国”、“佛罗里达”和“奥兰多”,还是应该是一行,名称为“美国 - 佛罗里达/奥兰多” ?在第一个选项的情况下,是否应使用适当的值插入 parent_id(美国是佛罗里达州的 parent_id,佛罗里达州是奥兰多的 parent_id)?
  • 在我的数据库中不应该是 3 行
  • 我怀疑你能不能直接用 phpmyadmin 来做。我认为@Mattia 的建议很有价值,即使我考虑使用每行正则表达式循环然后关联值。
  • 感谢您的帮助。我已经用我的实际代码编辑了问题

标签: php mysql file import phpmyadmin


【解决方案1】:

phpMyAdmin 可以帮助解决这个问题,但您必须使用另一个程序处理数据,以便使用相同的分隔符(-/ 应该没问题)。您可以在任何文本编辑器(或您最喜欢的命令行工具;sed、awk、perl 等)中使用“搜索和替换”来执行此操作。只需确保您的 数据 不包含您要替换的字符(例如,在“Saxony-Anhalt”中)。

然后您可以从 phpMyAdmin 的“导入”选项卡进行标准导入。看起来您需要使用以下参数:

  • /- 分隔的列(根据您在上面选择的内容)
  • 用:(空白)括起来的列
  • 转义的列:(空白)
  • 行终止于:auto

【讨论】:

  • 经过几分钟或几小时的思考后,我的意思是使用 phpmyadmin 是不可能的,因为我必须按州和城市添加 parent_id
  • 哦,因为它不在你的文本文件中,我认为它是一个自动增量主键。
  • 很高兴您找到了解决方案。
【解决方案2】:

这是我自己的解决方案

<?php
require 'funcs/connect.php';

$file = 'cities.txt';

$file_handle = fopen($file, 'r');

while (!feof($file_handle)) {

$line = fgets($file_handle);

$text_line = explode("-",$line);

echo $text_line[0];  
echo $text_line[1];
echo $text_line[2];


if ($text_line[1] != "")
        {
            $name = $text_line[1];
            $stmt = $handler->prepare("SELECT name FROM news_cat WHERE name = '$name'");
                $stmt->execute();
                $count = $stmt->rowCount(); 
                if ($count >= 1)
                {
                    echo"Kanton schon vorhanden";
                }
                else
                {
                $stmt = $handler->prepare("INSERT INTO news_cat(name,parent_id)VALUES('$name','0')");
                $stmt->execute();   
                }
        }

if ($text_line[2] != "")
        {
            $name = $text_line[2];
            $canton = $text_line[1];
            $stmt = $handler->prepare("SELECT name FROM news_cat WHERE name = '$name'");
                $stmt->execute();
                $count = $stmt->rowCount(); 
                if ($count >= 1)
                {
                    echo"Bezirk schon vorhanden";
                }
                else
                {
                $stmt = $handler->prepare("SELECT id FROM news_cat WHERE name = '$canton'");
                $stmt->execute();
                while($row = $stmt->fetch(PDO::FETCH_OBJ)){
                $parent_id = $row->id;  
                }


                $stmt = $handler->prepare("INSERT INTO news_cat(name,parent_id)VALUES('$name','$parent_id')");
                $stmt->execute();   
                }
        }

if ($text_line[0] != "")
        {
            $name = $text_line[0];
            $bezirk = $text_line[2];

                $stmt = $handler->prepare("SELECT id FROM news_cat WHERE name = '$bezirk'");
                $stmt->execute();
                while($row = $stmt->fetch(PDO::FETCH_OBJ)){
                $parent_id = $row->id;  
                }


                $stmt = $handler->prepare("INSERT INTO news_cat(name,parent_id)VALUES('$name','$parent_id')");
                $stmt->execute();   

        }

echo "<br>";
}

fclose($file_handle);


?>

【讨论】:

    猜你喜欢
    • 2013-07-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多