Можно ли выбрать отношение между узлами в запросе OQGRAPH?

Я играю с механизмом хранения OQGRAPH для MariaDB https://mariadb.com/kb/en/library/oqgraph-storage-engine/ и хочу реализовать отношения между узлами.

Пример данных на основе https://mariadb.com/kb/en/library/oqgraph-examples:

Таблица: people_relationships

origid destid relationship
1      2      friend
2      3      friend
3      4      friend
4      5      father
2      6      mother
5      6      sibling

При запросе всех узлов destid для 1:

SELECT * FROM people_graph g
WHERE g.latch='dijkstras' AND g.origid=1;

Я получаю кратчайший путь к каждому узлу в последовательностях:

latch       origid  destid  weight  seq linkid
dijkstras   1       NULL    4       6   5
dijkstras   1       NULL    3       5   4
dijkstras   1       NULL    2       4   6
dijkstras   1       NULL    2       3   3
dijkstras   1       NULL    1       2   2
dijkstras   1       NULL    0       1   1

Но я также хочу знать, какой узел приводит к отношениям. Другими словами: какой узел является источником отношения (названный предвидением).

Пример:

latch       origid  destid  weight  seq linkid  previd
dijkstras   1       NULL    4       6   5       4
dijkstras   1       NULL    3       5   4       3
dijkstras   1       NULL    2       4   6       2
dijkstras   1       NULL    2       3   3       2
dijkstras   1       NULL    1       2   2       1
dijkstras   1       NULL    0       1   1       NULL

Поэтому я могу ограничить результат особым видом отношений:

SELECT * FROM people_graph g
JOIN people_relationships d ON d.destid = g.linkid AND d.origid = g.previd
WHERE g.latch='dijkstras'
AND g.origid=1
AND d.relationship='friend';

Который возвращает друзей и друзей друзей, но без членов семьи.

0 ответов

Другие вопросы по тегам