Запрос на дерево, избегая избыточности - PullRequest
0 голосов
/ 02 января 2019

Я построил дерево примеров:

  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, мне нужно прочитать график и поместить его в массив.Массив должен быть структурирован как

enter image description here

Так что я задаю такой запрос:

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 не должен быть там дважды или чаще.Есть ли лучший подход?

1 Ответ

0 голосов
/ 02 января 2019

Я не думаю, что здесь нужен шаблон переменной длины, его должно быть достаточно для совпадения, чтобы просто соответствовать каждой паре родителя и потомка.

MATCH (parent:treeCategory)<-[:IS_SUBCATEGORY_OF]-(child) 
RETURN parent, child
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...