powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Select "цепочку связанных" значений
8 сообщений из 8, страница 1 из 1
Select "цепочку связанных" значений
    #38967550
mkdkdj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть:
id------idin
1------7
3------3
7------4
5------5
4------4
2------2

Подскажите, как получить цепочку всех! возможных значений например:
SELECT *
FROM tbl
WHERE id=1

Должны получить (пример):
1------7
7------4
4------4

id=1 ссылается на 7
id=7 ссылается на 4
id=4 ссылается на 4 (цепочка закончена)

Это всего лишь пример, цепочка может продолжаться и до 10 вложений
Что-то не могу сообразить, как такое написать в запросе?
...
Рейтинг: 0 / 0
Select "цепочку связанных" значений
    #38967571
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MySQL не поддерживает рекурсивных запросов.
Оформите это в виде процедуры с использованием временной таблицы.
...
Рейтинг: 0 / 0
Select "цепочку связанных" значений
    #38967633
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Select "цепочку связанных" значений
    #38968036
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нетленка (адаптировано для SQLFIDDLE)
table Tree
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table tree (
  id int primary key
  , parent int null
  , foreign key FK_tree(parent) references tree(id) -- on delete cascade
  );
insert tree (id,parent) values
    (1,null),(2,1),(3,2),(4,3),(5,2),(6,5),(7,5)
  , (8,5),(9,8),(10,8),(11,8),(12,5),(13,2)
  ,(14,1),(15,14),(16,14),(17,16),(18,16),(19,16)
  ,(20,1),(21,1),(22,21),(23,22)
  ,(240,23),(25,240),(26,240);

procedure
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
create procedure sp_treeview (p_id int)
begin
  declare v_lvl int;
  declare v_max int;
  set v_lvl=1;
  select left('100000000',1+length(max(id))) into v_max from tree;
  
  create temporary table proc_tree select * from temp_tree where 1=0;

  delete from temp_tree;
  insert temp_tree
    select v_lvl, t.id, t.parent, insert(v_max+t.id,1,1,'')
    from tree t
    where t.id=p_id;
  while row_count()>0 do
    delete from proc_tree;
    insert proc_tree
      select v_lvl+1, t.id, t.parent, concat(v.path,'.',insert(v_max+t.id,1,1,'')) 
      from temp_tree v 
      join tree t on t.parent = v.rid
      where v.lvl=v_lvl;
    set v_lvl=v_lvl+1;
    insert temp_tree select * from proc_tree;
  end while;
  drop temporary table proc_tree;
end

адаптация к SQLFIDDLE
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create procedure sp_tree(p_id int)
begin
  create temporary table temp_tree (
      lvl int, rid int, pid int, path varchar(2000)
    , unique(rid,pid));
  call sp_treeview (p_id);
  
  -- select * from temp_tree order by path;
  delete from t_tree; insert t_tree select * from temp_tree;
  
  drop temporary table temp_tree;
end;

Использование
Код: sql
1.
2.
3.
4.
5.
create table t_tree (
    lvl int, rid int, pid int, path varchar(2000)
  , unique(rid,pid));
call sp_tree(21);
select * from t_tree order by path;

Итогlvl rid pid path1 21 1 0212 22 21 021.0223 23 22 021.022.0234 240 23 021.022.023.2405 25 240 021.022.023.240.0255 26 240 021.022.023.240.026
PS. а лисапеды все не ехали и не ехали...
...
Рейтинг: 0 / 0
Select "цепочку связанных" значений
    #38968597
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkdkdjЕсть:
id------idin
1------7
3------3
7------4
5------5
4------4
2------2

Подскажите, как получить цепочку всех! возможных значений например:
SELECT *
FROM tbl
WHERE id=1

Должны получить (пример):
1------7
7------4
4------4

id=1 ссылается на 7
id=7 ссылается на 4
id=4 ссылается на 4 (цепочка закончена)

Это всего лишь пример, цепочка может продолжаться и до 10 вложений
Что-то не могу сообразить, как такое написать в запросе?

Никак запросом.
Как -- циклом, в процедуре.
...
Рейтинг: 0 / 0
Select "цепочку связанных" значений
    #38968618
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНикак запросом. 13509125 ?
...
Рейтинг: 0 / 0
Select "цепочку связанных" значений
    #38968654
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

Это запрос такой ?
...
Рейтинг: 0 / 0
Select "цепочку связанных" значений
    #38969090
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, а чем ещё это может быть?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Select "цепочку связанных" значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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