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

时间:2017-07-31 07:24:08

标签: php xampp

所以我的表格示例如何:

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文件。

1 个答案:

答案 0 :(得分:0)

鉴于对数据的评论,然后是这样的(未经测试)。

打开文件。阅读第一条记录并查找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个语句中执行多次插入),如果父名称不唯一,则无法可靠地处理。

您当前的结构不是嵌套集模型。设置嵌套集模型更加困难,并且在其中插入记录有点痛苦,但它确实使得更容易获取细节。