2013-07-06 83 views
1

我正在閱讀來自文本文件的足球比賽數據,並希望創建比賽和裁判節點。我希望邏輯工作的方式是創建一個匹配節點,然後獲取裁判名稱並僅在裁判不存在的情況下創建裁判節點,否則我只將現有裁判與該匹配相關聯。我目前沒有根節點,我不確定是否應該創建一個(對圖形建模來說很新穎)。掙扎與Cypher&CREATE UNIQUE

我有以下查詢,其中我認爲我很接近但不在那裏。

$match= $client->makeNode(); 
$match->setProperty('label', "match: ".$feed['match_number']) 
     ->setProperty('type', "match")->save(); 

//現在創建的比賽節點讓我們看看,如果在飼料目前已經裁判

$queryString = "START match=node({nodeId}) ". <----- NEED TO LOOK AT ALL CASES????? 
"CREATE UNIQUE (referee{label:{name}, type:'referee'})-[:REFEREED{ label:'REFEREED' }]->(match)"."RETURN referee"; 

$query = new Neo4j\Cypher\Query($client, $queryString, array('nodeId' => $match->getId(),'name' => $feed['referee_name'])); 
$result = $query->getResultSet(); 

存在是否有人可以幫助?

回答

1

其中一個可能的模式,在目前似乎滿足了你張貼的所有查詢:

(Team)-[:PLAYS]->(Match) 

(Match)-[:HAS_REFEREE]->(Referee) 

(Match)-[:PLAYED_IN]->(City) 

戲劇關係可以有一個屬性,以指示隊是主隊。您也可以在PLAYS關係上擁有一個屬性來表明該團隊是否獲勝。或者,如果獲勝是你所尋找的重要組成部分,你可以創建一個額外的關係,如(Team)-[:WON]->(Match)(儘管如此,你需要考慮如何對抽籤進行建模。兩個隊伍中的任何一個都沒有WON關係一場比賽可能表明一場抽籤可能)。

  1. 特定裁判的所有比賽:從裁判開始,遍歷比賽到城市。你可以索引裁判的一些獨特屬性,以便能夠快速查找他

  2. 裁判員工作和主隊獲勝的所有比賽:從裁判員開始,找到他所有的比賽,篩選WON關係/財產和主隊屬性

  3. 有勝對主隊的最高計數所有裁判:同上,開始在所有裁判

  4. 活躍裁判對於一個城市:開始在城市,找到所有匹配項及其裁判

取決於你想回答(尤其是主隊屬性,贏/輸的關係或性質等)

更多的問題,可以移動周圍的事物一點,我不認爲你需要在根節點所有。你可以索引所有比賽/城市/裁判等,如果你想找到他們所有人

+0

非常感謝。這有助於我建模。我會很快在這裏回覆代碼。 – jini