Общие друзья (mutual friends)
От: Edain Верблюд  
Дата: 06.10.10 17:42
Оценка:
Всем привет. Помогите написать простой (я уверен в этом) запрос для MySQL.

Есть таблица graph. В ней два столбца — outV и inV. В таблице хранятся ребра графа, т.е. в каждом столбце — идентификатор вершины. Если между вершиной 0 и 1 есть ребро, то в таблице будет запись:

outV | inV
0 | 1
...
1 | 0

Теперь представим, что этот граф — социальная сеть: вершины — это люди, ребра — "дружба" между ними. Задача следующая: найти общих друзей у двух людей в этой социальной сети.

Я вижу решение этой задачи в три этапа:
1. Находим всех друзей первого чела без второго (a — первый чел, b — второй)
Result1 = select inV from graph as g where g.outV = a and g.inV <> b;
2. Находим всех друзей второго чела без первого (a и b те же):
Result2 = select inV from graph as g where g.outV = b and g.inV <> a;
3. Найти общих друзей из результата первого и второго запросов (пересечение двух множеств):
Result1 intersect Result2;

Как это сделать одним запросом?
mysql sql-запрос
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.