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

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

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

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

Так вот: желательно это все одним запросом. Может можно как-нить с LEFT JOIN поиграться? Спасибо :)
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #33475205
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"длина" связи как-то ограничена?
переход на другие СУБД (Oracle) возможен?
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #33475208
flyinghero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максимальная длина связи скорее всего от А до Г (то есть 3 ссылки).
На СУБД другую переходить не особо хочется
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #33475210
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторзапрос должен вернуть три соответствующих айдишника
три поля в одной записи или три записи с одним полем?
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #33475212
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как должны выглядеть ситуации, когда связей несколько (например, через разных промежуточных юзеров)?
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #33475216
flyinghero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да мне вобщем то все равно. Надо просто узнать, как пользователи связаны.
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #33475221
flyinghero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А связь достаточно вывести одну (есть есть несколько) - кратчайшую
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #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
Поиск связи пользователей
    #33475238
flyinghero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм, про юнионы действительно не думал :)
А насколько это быстро будет работать? Пользователей могут быть десятки тысяч (а то и сотни)
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #33475242
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flyingheroА насколько это быстро будет работать? Пользователей могут быть десятки тысяч (а то и сотни)
если индексы нужные создать, то не проблема.
а если заставить MySQL соединять таблицы в нужном порядке, то тем более не проблема.
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #33475245
flyinghero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок, большое спасибо :) Попробую этот запрос
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #33475283
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько я помню математику, то кратчайший путь находится с помощью графов. приведенное здесь решение - частный случай.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
Поиск связи пользователей
    #33475309
flyinghero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Именно о таком частном случае я спаршивал
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск связи пользователей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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