Код: Выделить всё
-- adjacency list table
CREATE TABLE dct_node_adjc
(
hdct_node_adjc BIGINT UNSIGNED NOT NULL DEFAULT (UUID_SHORT()),
hdct BIGINT UNSIGNED NOT NULL,
hdct_node_adjc_parent BIGINT UNSIGNED NULL,
CONSTRAINT PRIMARY KEY (hdct_node_adjc),
CONSTRAINT FOREIGN KEY (hdct_node_adjc_parent)
REFERENCES dct_node_adjc(hdct_node_adjc) ON UPDATE CASCADE
);
-- load data
INSERT INTO dct_node_adjc (hdct_node_adj, hdct, hdct_node_adj_parent)
VALUES
(101283669313847302, 101283669313847296, NULL),
( 101324752823517184, 101283669313847297, 101283669313847302),
(101283669313847303, 101283669313847298, 101283669313847302),
(101324752823517185, 101283669313847298, 101324752823517184),
(101283669313847304, 101283669313847299, 101283669313847303),
(101324752823517186, 101283669313847299, 101324752823517185),
(101283669313847305, 101283669313847301, 101283669313847304),
(101324752823517187, 101283669313847301, 101324752823517186),
(101283669313847311, 101283669313847306, NULL),
(101283669313847312, 101283669313847307, 101283669313847311),
(101283669313847313, 101283669313847308, 101283669313847312),
(101283669313847314, 101283669313847309, 101283669313847313),
(101283669313847315, 101283669313847310, 101283669313847314),
(101283669313847320, 101283669313847316, NULL),
(101283669313847321, 101283669313847317, 101283669313847320),
(101283669313847322, 101283669313847318, 101283669313847321),
(101283669313847323, 101283669313847319, 101283669313847322);
-- nested set table
DROP TABLE IF EXISTS dct_node_nest;
CREATE TABLE dct_node_nest
(
hdct_node_adjc BIGINT UNSIGNED NOT NULL,
hdct_node_adjc_parent BIGINT UNSIGNED NULL,
hlevel INT NOT NULL DEFAULT 0,
LeftBower INT NOT NULL DEFAULT 0,
RightBower INT NOT NULL DEFAULT 0,
NodeNumber INT NOT NULL DEFAULT 0,
NodeCount INT NOT NULL DEFAULT 0,
SortPath VARBINARY(8000),
CONSTRAINT UNIQUE KEY (hdct_node_adjc)
(hdct_node_adjc)
);
SET SESSION sql_mode = '';
WITH RECURSIVE cte AS (
SELECT a.hdct_node_adjc, a.hdct_node_adjc_parent
, 1 AS hlevel, 0 AS LeftBower, 0 AS RightBower, 0 AS NodeNumber , 0 AS NodeCount
, UNHEX(HEX(a.hdct_node_adjc)) AS SortPath
FROM dct_node_adjc AS a WHERE a.hdct_node_adjc_parent IS NULL
UNION ALL
SELECT r.hdct_node_adjc, r.hdct_node_adjc_parent
, c.hlevel + 1 AS hlevel, c.LeftBower, c.RightBower, c.NodeNumber, c.NodeCount
, CONCAT(c.SortPath, UNHEX(HEX(r.hdct_node_adjc))) AS SortPath
FROM dct_node_adjc AS r JOIN cte AS c ON c.hdct_node_adjc = r.hdct_node_adjc_parent
)
SELECT c.hdct_node_adjc, c.hlevel, c.SortPath FROM cte AS c;
SET SESSION sql_mode = 'TRADITIONAL';
< /code>
нули в select_expr являются держателем места для последующей конструкции. Только основные столбцы выбраны для тестирования. Оператор inct_node_nest также не включен. Последующий идентификатор узла - HDCT_NODE_ADJC. 5 -й идентификатор сбрасывается в ряды с Hlevel 5. Почему?
Подробнее здесь: https://stackoverflow.com/questions/796 ... characters
Мобильная версия