Задать вопрос
@Kennius
Начинающий фронт-эндер

Где ошибка в коде при создании древа в sql из файла?

пытаюсь из файла tree.txt вытащить иерархию табуляцией, родители и подразделы первые определяются правильно дальше идёт путаница, где косяк подскажите
file.php
<?php
$conn = new mysqli("localhost", "user", "pass", "bd");

if ($conn->connect_error) {
    die("Не удалось подключиться к базе данных: " . $conn->connect_error);
}
$conn->query("DROP TABLE IF EXISTS tree"); //что бы индексы чистились
$tableName = "tree";
$conn->query("CREATE TABLE IF NOT EXISTS $tableName (
    id INT NOT NULL AUTO_INCREMENT,
    parent_id VARCHAR(255) NOT NULL,
    name VARCHAR(255) NOT NULL,
    PRIMARY KEY (id)
)");


$treeText = file_get_contents("tree.txt");
$lines = explode("\n", $treeText);
$conn->begin_transaction();
$rootId = null;
$parentId = 0;
$level = 0;
$stmt = $conn->prepare("INSERT INTO tree (parent_id, name) VALUES (?, ?)");

foreach ($lines as $line) {
    // Подсчет уровня отступов
    $level = substr_count($line, "\t");

    // Обработка главного раздела
    if ($level == 0) {
        $parentId = 0;
        $name = trim($line);

        if ($parentId == 0) {
            $rootId = $conn->insert_id;
        }
    }
    // Обработка дочерних элементов и подподразделов
    else {
        $parentId = $conn->insert_id;
        $name = trim($line);
    }

    $stmt->bind_param("ss", $parentId, $name);
    $stmt->execute();
}

$stmt->close();

$conn->commit();
$conn->close();
?>

tree.txt

Д1 
	В1
		В11
		В12
	В2
		В21
		В22
			В221
			В222
			В223
Д2
	В1
	В2
	В3
		В31
		В32
		В33
		В34
			В341
			В342
Д3
	В1
	В2
	В3

  • Вопрос задан
  • 118 просмотров
Подписаться 2 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы