Сравнение запросов OrientDB

У меня есть следующие сомнения относительно запроса в OrientDB.

У меня есть три пользователя вершин, события и спорт.

Сначала пользователи выбирают спорт, и в этот момент создается край has_sport, который имеет «выход» для пользователя и «вход» для спорта.

И имея некоторые события, зарегистрированные другими пользователями следующим образом, пользователи-> события-> спорт, пользователи создают крайние события «вне» и «в», а события край «вне» и «в» спорте.

Теперь вопрос о том, как сделать запрос, я хочу сделать запрос, который возвращает пользователю события в соответствии с видами спорта, которые он выбрал. Другими словами, чтобы увидеть, соответствует ли пользовательский спорт спортивному событию.

Vertex: пользователи, события, спорт Edges: has_sport, has_event

График изображения

Извините за мой плохой английский, хе-хе

Спасибо

ИЗМЕНИТЬ

    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
    )

person estevammr    schedule 16.03.2017    source источник


Ответы (2)


Вы можете рассмотреть возможность использования оператора 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...
)
person Luigi Dell'Aquila    schedule 17.03.2017
comment
просматривая модель, я не уверен, что это имеет смысл... Я имею в виду, что пользователь может выбрать вид спорта, но у него есть события, которые соответствуют другим видам спорта, которые он не выбрал... может быть, я что-то не так, но я надеюсь у вас есть идея о том, как написать запрос - person Luigi Dell'Aquila; 17.03.2017
comment
Привет, Луиджи, спасибо за ответ и предложение. Я поместил изображение графика, чтобы получить лучшее представление. Идея заключается в том, что пользователь регистрируется в системе и выбирает тот вид спорта, который ему нравится. Если есть события, созданные другими пользователями с тем же видом спорта, он будет представлен ему для участия. В противном случае ничего не отображается. Затем я хочу в этом запросе проверить, совпадают ли спортивные состязания пользователя со спортивными состязаниями. Спасибо, что показали мне МАТЧ, я продолжу тестировать здесь другими способами, это все еще не идеально. - person estevammr; 19.03.2017
comment
Луиджи, я разместил запрос, который сработал для того, что мне нужно, ниже EDIT вопроса. Я хотел бы, чтобы вы увидели, соответствует ли этот запрос лучшим практикам OrientDB. Спасибо - person estevammr; 19.03.2017
comment
Спасибо Луиджи! Ваш ответ был очень полезен! - person estevammr; 20.03.2017

Надеюсь, это сработает..

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

Пожалуйста, проверьте логику "выхода"/"входа". при необходимости измените его.

person Vineeth    schedule 16.03.2017
comment
Спасибо Винит!! Но это все еще не тот запрос, который мне нужен, я буду продолжать пытаться здесь. Прикладываю картинку для лучшего понимания проблемы. Еще раз спасибо - person estevammr; 19.03.2017