2017-03-16 152 views
0

我有以下疑問在OrientDB中查詢。OrientDB查詢比較

我有三個頂點用戶,事件和運動。

第一個用戶選擇運動,並在那一點創建has_sport邊緣,它具有用戶的'出'和運動的'入'。

並且有一些事件由其他用戶註冊如下,users-> events-> sports,用戶創建邊緣'out'和'in'事件和事件邊緣'out'和'in'運動。

現在,如何做查詢的問題,我想做一個查詢,根據他選擇的運動向用戶返回事件。換句話說,看用戶體育是否等於賽事運動。

頂點:用戶,事件,體育 邊緣:has_sport,has_event

Image graph

對不起我的英文不好嘿嘿

謝謝

編輯

SELECT expand(event) FROM (
     MATCH 
     {class:users, as:user, where:(userId = ?)} -has_sport-> {as:sport}, 
     {class:events, as:event} -has_sport-> {as:sport}, 
     {as:user} -has_sport-> {as:sport} 
    RETURN event 
    ) 

回答

0

您可以考慮使用MATCH聲明:

MATCH 
    {class:User, as:user, where:(userId = ?)} -has_event-> {as:event} -has_sport-> {as:sport}, 
    {as:user} -has_sport-> {as:sport} 
RETURN event 

這將返回事件的RID。如果您想要擴展記錄,可以將其包裝在例如SELECT expand()中。

SELECT expand(event) FROM (
    MATCH... 
) 
+0

查看模型,我不確定這是否有道理...我的意思是,用戶可以選擇一項運動,但有事件匹配他沒有選擇的其他運動...也許我得到了有什麼不對,但是我希望你對如何編寫查詢有了一個想法 –

+0

嗨路易吉,謝謝你的回答和消化。 我把圖形的圖像,以獲得更好的主意。 這個想法是以下用戶在系統中註冊並選擇它喜歡的運動。 如果有其他用戶創建的事件與同一項運動呈現給他參與。 否則沒有任何顯示。 然後,我想在此查詢中驗證用戶的運動是否與事件的運動相同。 感謝您向我展示「MATCH」我會繼續在這裏以其他方式進行測試,但這仍然不理想。 – estevammr

+0

Luigi,我在這個問題的「編輯」下面提出了一個針對我需要的內容的查詢。 我希望你看看這個查詢是否符合OrientDB的最佳實踐。 謝謝 – estevammr

0

希望這個作品..

select out.name as sports, in('has_event').name as eventname from (select expand(out('has_sport')) from User where userid = 151) 

請驗證 「了」/ 「在」 邏輯。如果需要的話改變它。

+0

謝謝Vineeth !!但它仍然不是我需要的查詢,我會繼續在這裏嘗試。 爲了更好地理解問題,我放了一張照片。 再次感謝您 – estevammr