Как сделать дерево из таблицы MySQL - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть такая таблица:

id        title        parent_id
1         a            0
2         b            0
3         c            1
4         d            2
5         e            1
6         f            3
7         g            3

, и мне нужно сделать JSON для отправки во внешний интерфейс.Я не знаю, как сделать этот JSON из моего стола.Вот еще некоторая информация о моей цели и коде: тип узла:

type Node struct {
        Id       int64  `json:"id"'
        Title    string `json:"title"`
        ParentId int64  `json:"parent_id"`
        Children []Node `json:"children"`
}

Я использую sqlx для чтения из базы данных в срез

И мне нужен json, подобный этому:

[
    {
    "id" : 1,
    "title" : "a",
    "parent_id" : 0,
    "children" : [ 
                    {
                    "id" : 3,
                    "title" : "c",
                    "parent_id" : 1,
                    "children" .....
                    } 
                 ]
    },    
    .
    .
    .
]

Уже есть вопрос, похожий на мой вопрос, но разница в том, что я читаю узлы из таблицы mysql, а не из консоли, а также мне нужно упорядочить дерево в json

1 Ответ

0 голосов
/ 16 декабря 2018
var items = select * from tbl order by parent_id;

Node.addChild = n=>this.children.add(n);
var root= new Node({Id:0, Parent:null, Title:'Root',Children:[]);

add(root, items, 0,0)

function add(tree,items, depth){
    if(depth>100){ 
        throw 'something'; 
    }
    var itemsOnThisLevel = items.where(item.parent_id==tree.id)     

    foreach(var item in itemsOnThisLevel){
        var n = new Node(item);
        tree.add(n);
        add(n, items, depth+1);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...