如何阅读父亲并将他的id从txt文件分配给数据库?

问题描述:

所以有我的表例如它的外观:如何阅读父亲并将他的id从txt文件分配给数据库?

ID, Father, Text 
1, 0, Text 
2, 1, Text1 
3, 1, Text2 
4, 1, Text3 
5, 1, Text4 
6, 2, Text5 
7, 2, Text6 

我的txt文件,例如:

Text3 
name1 
name2 
name3.... 

只有第一行是从数据库的父亲,它需要它的id传递给孩子的所有其他线。 (我的表是300行,文件少于1000行),孩子不能是父亲。

我要的是,当我插入txt文件数据库得到这样的结果:

ID, Father, Text 
1, 0, Text 
2, 1, Text1 
3, 1, Text2 
4, 1, Text3 
5, 1, Text4 
6, 2, Text5 
7, 2, Text6 
8, 4, name1 
9, 4, name2 
10, 4, name3... 

有什么办法如何实现这一目标?我读了一些关于嵌套设置的内容,但仍然不知道我该如何做到这一点。

现在我已经在文本文件中输入了父亲给所有的孩子,以便现在有点作品,直到我想如何做,而不必将它们输入到txt文件。

+0

你在这里问过同样的问题,https://stackoverflow.com/q/45233119/1427878请阅读[问]。当你问这里时,你所期待的最低限度是你描述了迄今为止解决问题所做的工作。 – CBroe

+0

那么我的问题得到了解决,我正在寻找树结构,节点,但仍然不知道如何做到这一点。 – David

+1

_“我的问题已经关闭了”_ - 哈哈,所以你就走,“不管怎样,我只是再次发布完全相同的东西”_ ...? _至少_你应该包括你到目前为止所尝试的,在你从另一个问题上得到人们的提示之后。 – CBroe

给出对数据的评论,然后像这样(未测试)。

打开文件。阅读第一条记录并查找该ID以便与之一起使用。通过文件与父ID插入行的其余部分的读你已经找到

<?php 

$mysqli = new mysqli('host','user','pass','db'); 
$fp = fopen("some_file.txt", "r"); 

if (($in_line = fgets($fp, 4096)) !== false) 
{ 
    $father = trim($in_line); 

    if ($result = $mysqli->query("SELECT id FROM some_table WHERE `Text` = '".$mysqli->real_escape_string($father)."'", MYSQLI_USE_RESULT)) 
    { 
     if ($row = $result->fetch_object()) 
     { 
      $father_id = (int)$row['id']; 
      while (($in_line = fgets($fp, 4096)) !== false) 
      { 
       $child = trim($in_line); 
       if (!$mysqli->query("INSERT INTO some_table (ID, Father, Text) VALUES(NULL, $father_id, '".$mysqli->real_escape_string($child)."')")) 
       { 
        echo "Insert failed"; 
       } 
      } 
     } 
    } 
} 
fclose($fp); 

可以改善这一点(例如,你可以在1个语句许多刀片)的性能,此次荣获”如果父母名称不唯一,则可靠地应对。

您当前的结构不是嵌套集合模型。设置一个嵌套集模型比较困难,插入记录有点痛苦,但它确实使得获取细节变得更容易。

+0

嗯,继续获取错误插入失败的所有线路 – David

+0

无法在此处进行调试。因为它到达那里它正在做第一个选择,所以建议db连接是好的。所以可能这个声明(猜测文本的列名应该用反向抽取来逃避,但是我避免了可能是保留字的任何列名)。 – Kickstart

+0

是的,我回来了ticed表和列名仍然有相同的错误:D呃。但感谢代码这应该工作后,我修正了这个错误。 – David