Я построил дерево примеров:
CREATE (c1:treeCategory {name:"root", catID:1})
CREATE (c2:treeCategory {name:"Maschinen", catID:2})
CREATE (c3:treeCategory {name:"Siebe", catID:3})
CREATE (c4:treeCategory {name:"Zubehör", catID:4})
CREATE (c5:treeCategory {name:"SUPERTAUT", catID:5})
CREATE (c6:treeCategory {name:"Fusion", catID:6})
CREATE (c7:treeCategory {name:"Motor", catID:7})
CREATE (c8:treeCategory {name:"Rahmen", catID:8})
CREATE (c9:treeCategory {name:"SonoWave", catID:9})
CREATE (c10:treeCategory {name:"Scalper", catID:10})
CREATE (c11:treeCategory {name:"Rundsieb", catID:11})
CREATE (c12:treeCategory {name:"Dom", catID:12})
CREATE (c13:treeCategory {name:"FlowThru", catID:13})
CREATE (c2) -[:IS_SUBCATEGORY_OF]-> (c1)
CREATE (c3) -[:IS_SUBCATEGORY_OF]-> (c1)
CREATE (c4) -[:IS_SUBCATEGORY_OF]-> (c1)
CREATE (c5) -[:IS_SUBCATEGORY_OF]-> (c3)
CREATE (c6) -[:IS_SUBCATEGORY_OF]-> (c3)
CREATE (c7) -[:IS_SUBCATEGORY_OF]-> (c4)
CREATE (c8) -[:IS_SUBCATEGORY_OF]-> (c2)
CREATE (c9) -[:IS_SUBCATEGORY_OF]-> (c4)
CREATE (c10) -[:IS_SUBCATEGORY_OF]-> (c2)
CREATE (c11) -[:IS_SUBCATEGORY_OF]-> (c2)
CREATE (c12) -[:IS_SUBCATEGORY_OF]-> (c8)
CREATE (c13) -[:IS_SUBCATEGORY_OF]-> (c8)
Чтобы построить дерево в PHP, мне нужно прочитать график и поместить его в массив.Массив должен быть структурирован как
Так что я задаю такой запрос:
MATCH p=(a:treeCategory)<-[:IS_SUBCATEGORY_OF*1..]-()
WITH nodes(p) as nodes
RETURN nodes[size(nodes)-2] as Parent,
nodes[size(nodes)-1] as Child;
К сожалению, я получаю большинствопары данных избыточны.Первый столбец таблицы может иметь избыточные имена, например, у Maschinen есть несколько подузлов.Но второй столбец должен иметь каждый узел только один раз, поэтому ни один catID не должен быть там дважды или чаще.Есть ли лучший подход?