powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Все связи с одной таблице
16 сообщений из 16, страница 1 из 1
Все связи с одной таблице
    #39192867
ShadowMaster63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, чет туплю.
есть таблица
id,src,dst

пример записей
1,5,19
2,3,6
3,6,5
4,19,6
5,4,8

то есть таблица показывает кто с кем связан.

Мне же нужно вытащить все эти связи.
Например для src=5 получим
5,19
19,6
6,5
3,6
а для src=4
только 4,8
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192868
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
одним запросом никак, только ХПшкой
типа такой 13675569
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192869
ShadowMaster63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

в моём случае база ro так что скорее всего придется это дерево на стороне клиента строить.
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192884
ShadowMaster63, непонятно откуда взялось 3,6 для src=5.

Если число связей конечно и невелико, то можно через переменную и UNION:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select m.src, (@src := m.dst) as dst from muliq m, (select @src:=5) s where m.src=@src
UNION
select m.src, (@src := m.dst) as dst from muliq m where m.src=@src
UNION
select m.src, (@src := m.dst) as dst from muliq m where m.src=@src
UNION
select m.src, (@src := m.dst) as dst from muliq m where m.src=@src;
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192891
ShadowMaster63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Громыхатель,

3,6 взялось потому что в таблице 3 дружит с 6.
я так понимаю это стандартная задачи по типу друзья друзей.
То есть 3 косвенно связано с 5.

Число связей конечно, но велико.
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192903
ShadowMaster63, я не вижу где в ваших данных связь с 3. Такой цифры вообще нет в колонке dst.

5,19 -> 19,6 -> 6,5 -> должно быть 5,19 (вроде бы...)

Или я не понял алгоритм, или вы указали не полные исходные данные.
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192907
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Громыхатель,

друзья моих прямых друзей, третий уровень не нужен....
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192911
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Громыхателья не вижу где в ваших данных связь с 3. Такой цифры вообще нет в колонке dst
Вероятно, должно быть не src-dst, а friend1-friend2, т.е. связь ненаправленная.
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192925
а, т.е. связь двунаправленная и искать нужно и по dst тоже. Тогда так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select src, (@src:=dst) dst from muliq m, (select @src:=5) s WHERE src=@src or dst=@src
UNION
select src, (@src := dst) dst from muliq m where src=@src or dst=@src
UNION
select src, (@src := dst) dst from muliq m where src=@src or dst=@src
UNION
select src, (@src := dst) dst from muliq m where src=@src or dst=@src
UNION
select src, (@src := dst) dst from muliq m where src=@src or dst=@src
UNION
select src, (@src := dst) dst from muliq m where src=@src or dst=@src;
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192932
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если формализовать задачу - то речь идёт о поиске всех путей в ненаправленном невзвешенном графе. Алгоритмов - ну просто завались...
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192953
ShadowMaster63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Ну вот теперь ясен вектор поиска, а то с утра сквозняк в голове.
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192967
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadowMaster63 , поройся по форуму - я где-то постил код волнового алгоритма на SQL. Его не так уж и сложно адаптировать под твою задачу.
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39192995
ShadowMaster63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39193000
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadowMaster63Ты про это ?
Это немного не то, но подход тот же.
Ок, выложу тут.
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39193010
ShadowMaster63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Ух, круто. правда с моими ограничениями на работу с БД, придется все таки на клиентской стороне делать.
Спасибо! Код в копилку.
...
Рейтинг: 0 / 0
Все связи с одной таблице
    #39193022
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadowMaster63с моими ограничениями на работу с БД, придется все таки на клиентской стороне делать.Так и задача исходная явно для выполнения на клиенте. От сервера только получаешь исходные данные для расчёта. Возможно, слегка их нормализовав (скажем, чтобы src<dst) и отсортировав - это немного упростит реализацию.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Все связи с одной таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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