2015-05-12 2 views
0

У меня есть запрос, очень похожий на этот:OrientDB - LET переменная где

SELECT FROM Post 
LET 
$category = (SELECT EXPAND(out('PartOf')) FROM $current), 
$poster = (SELECT EXPAND(in('Posted')) FROM $current) 
WHERE 
$poster <> #18:1 
AND $poster IN (SELECT EXPAND(out('IsUser')) FROM (SELECT EXPAND(out('Related')) FROM #18:1) WHERE out('RelatedIn') IN ($category)) 
LIMIT 10000 

И граф так:

CREATE CLASS Post EXTENDS V; 
CREATE CLASS Category EXTENDS V; 
CREATE CLASS User EXTENDS V; 
CREATE CLASS UserRelated EXTENDS V; 
CREATE CLASS PartOf EXTENDS E; 
CREATE CLASS IsUser EXTENDS E; 
CREATE CLASS Posted EXTENDS E; 
CREATE CLASS Related EXTENDS E; 
CREATE CLASS RelatedIn EXTENDS E; 

PartOf relates Post and Cateogry 
IsUser relates UserRelated and User 
Posted relates User and Post 
Related relates User and UserRelated 
RelatedIn relates UserRelated and Category 

UserRelated is an hyper-edge 

То, что я ищу являются сообщения, от пользователей связанных другому пользователю (# 18: 1), где отношение между пользователями находится в той же категории, что и категория сообщения, которое запрос просматривает в этот момент.

Предложение where после И не работает. Если я удалю его, запрос даст те же результаты.

С другой стороны, если я изменяю $ category в этом разделе с помощью конкретного @rid, запрос работает отлично ... но мне нужна более одной конкретной категории.

Итак, что не так в этом вопросе?

(я надеюсь, что это объяснение достаточно понятно)

Благодаря

ответ

1

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

Название переменной
SELECT FROM Post 
LET 
$category = (SELECT EXPAND(out('PartOf')) FROM $current), 
$poster = (SELECT EXPAND(in('Posted')) FROM $current), 
$relatedUser = (SELECT EXPAND(out('IsUser')) FROM (SELECT EXPAND(out('Related')) FROM #18:1) WHERE out('RelatedIn') IN ($parent.category)) 
WHERE 
$poster <> #18:1 
AND $poster IN ($relatedUser) 
LIMIT 10000 

Ключ использовал $ parent.category внутри подзапроса. Мне было не совсем ясно, что объявленная переменная в родительском объекте должна использоваться с $ parent.variable в любых подзапросах.

Я надеюсь, что это поможет кому-то в будущем!

+0

Какова цель этого оператора? <> –

+0

Оператор «<>» означает не равный;) – Jobel

Смежные вопросы