|
|
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
Помогите кто-нить правильно составить запрос. Есть таблица юзеров, есть таблица которая содержит связи двух пользователей (две колонки: id одного пользователя и id другого). Для каждой связи в таблице две записи: A связан с Б, Б связан с А. Можно ли как-нибудь одним запросом определить, связаны ли любые два произвольных пользователя и если связаны, то через сколько (и каких) других пользователей. Например есть юзеры А,Б,В,Г А связан с Б, Б связан с В => А связан с В через пользователя Б и запрос должен вернуть три соответствующих айдишника. А связан с Б, Б связан с В, В связан с Г => А связан с Г через пользователей Б и В. Так вот: желательно это все одним запросом. Может можно как-нить с LEFT JOIN поиграться? Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 21:16:40 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
"длина" связи как-то ограничена? переход на другие СУБД (Oracle) возможен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 21:22:01 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
Максимальная длина связи скорее всего от А до Г (то есть 3 ссылки). На СУБД другую переходить не особо хочется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 21:26:42 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
авторзапрос должен вернуть три соответствующих айдишника три поля в одной записи или три записи с одним полем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 21:30:16 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
как должны выглядеть ситуации, когда связей несколько (например, через разных промежуточных юзеров)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 21:31:27 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
Да мне вобщем то все равно. Надо просто узнать, как пользователи связаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 21:34:51 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
А связь достаточно вывести одну (есть есть несколько) - кратчайшую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 21:38:14 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
flyingheroДа мне вобщем то все равно. Надо просто узнать, как пользователи связаны. для таблицы user_table(id_src,id_dst), искомых юзеров id1 и id2 и для длины связи не более 3 - примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 21:52:02 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
Хм, про юнионы действительно не думал :) А насколько это быстро будет работать? Пользователей могут быть десятки тысяч (а то и сотни) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 21:55:57 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
flyingheroА насколько это быстро будет работать? Пользователей могут быть десятки тысяч (а то и сотни) если индексы нужные создать, то не проблема. а если заставить MySQL соединять таблицы в нужном порядке, то тем более не проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 22:00:34 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
Ок, большое спасибо :) Попробую этот запрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 22:01:27 |
|
||
|
Поиск связи пользователей
|
|||
|---|---|---|---|
|
#18+
На сколько я помню математику, то кратчайший путь находится с помощью графов. приведенное здесь решение - частный случай. ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 22:47:52 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=637&tid=1853195]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 349ms |

| 0 / 0 |
