Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск связи пользователей / 13 сообщений из 13, страница 1 из 1
10.01.2006, 21:16:40
    #33475202
flyinghero
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
Помогите кто-нить правильно составить запрос.
Есть таблица юзеров, есть таблица которая содержит связи двух пользователей (две колонки: id одного пользователя и id другого). Для каждой связи в таблице две записи: A связан с Б, Б связан с А. Можно ли как-нибудь одним запросом определить, связаны ли любые два произвольных пользователя и если связаны, то через сколько (и каких) других пользователей.

Например есть юзеры А,Б,В,Г

А связан с Б, Б связан с В => А связан с В через пользователя Б и запрос должен вернуть три соответствующих айдишника.

А связан с Б, Б связан с В, В связан с Г => А связан с Г через пользователей Б и В.

Так вот: желательно это все одним запросом. Может можно как-нить с LEFT JOIN поиграться? Спасибо :)
...
Рейтинг: 0 / 0
10.01.2006, 21:22:01
    #33475205
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
"длина" связи как-то ограничена?
переход на другие СУБД (Oracle) возможен?
...
Рейтинг: 0 / 0
10.01.2006, 21:26:42
    #33475208
flyinghero
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
Максимальная длина связи скорее всего от А до Г (то есть 3 ссылки).
На СУБД другую переходить не особо хочется
...
Рейтинг: 0 / 0
10.01.2006, 21:30:16
    #33475210
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
авторзапрос должен вернуть три соответствующих айдишника
три поля в одной записи или три записи с одним полем?
...
Рейтинг: 0 / 0
10.01.2006, 21:31:27
    #33475212
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
как должны выглядеть ситуации, когда связей несколько (например, через разных промежуточных юзеров)?
...
Рейтинг: 0 / 0
10.01.2006, 21:34:51
    #33475216
flyinghero
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
Да мне вобщем то все равно. Надо просто узнать, как пользователи связаны.
...
Рейтинг: 0 / 0
10.01.2006, 21:38:14
    #33475221
flyinghero
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
А связь достаточно вывести одну (есть есть несколько) - кратчайшую
...
Рейтинг: 0 / 0
10.01.2006, 21:52:02
    #33475231
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
flyingheroДа мне вобщем то все равно. Надо просто узнать, как пользователи связаны.

для таблицы user_table(id_src,id_dst), искомых юзеров id1 и id2 и для длины связи не более 3 - примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select  3  as link_length, u1.id_src as user1, u2.id_src as user2, u3.id_src as user3, u3.id_dst as user4
  from user_table u1, user_table u2, user_table u3
  where u1.id_src=id1 and u1.id_dst=u2.id_src and u2.id_dst=u3.id_src and u3.id_dst=id2
union all
select  2  as link_length, u1.id_src as user1,u1.id_src as user2, u2.id_dst as user3, null as user4
  from user_table u1, user_table u2
  where u1.id_src=id1 and u1.id_dst=u2.id_src and u2.id_dst=id2
 union all
select  1  as link_length, id_src as user1, id_dst as user2, null as user3, null as user4
  from user_table
  where id_src=id1 and id_dst=id2
...
Рейтинг: 0 / 0
10.01.2006, 21:55:57
    #33475238
flyinghero
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
Хм, про юнионы действительно не думал :)
А насколько это быстро будет работать? Пользователей могут быть десятки тысяч (а то и сотни)
...
Рейтинг: 0 / 0
10.01.2006, 22:00:34
    #33475242
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
flyingheroА насколько это быстро будет работать? Пользователей могут быть десятки тысяч (а то и сотни)
если индексы нужные создать, то не проблема.
а если заставить MySQL соединять таблицы в нужном порядке, то тем более не проблема.
...
Рейтинг: 0 / 0
10.01.2006, 22:01:27
    #33475245
flyinghero
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
Ок, большое спасибо :) Попробую этот запрос
...
Рейтинг: 0 / 0
10.01.2006, 22:47:52
    #33475283
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
На сколько я помню математику, то кратчайший путь находится с помощью графов. приведенное здесь решение - частный случай.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
11.01.2006, 00:03:39
    #33475309
flyinghero
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск связи пользователей
Именно о таком частном случае я спаршивал
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск связи пользователей / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]