LINUX.ORG.RU

Наконец-то! Я осилил рекурсивное дерево на SQL!

 ,


4

4

Господа, дамы и господамы, — делюсь годнотой!

# sqlite3 < ~/ctree.sql 
0|Hello world!
0 > 2|First response.
0 > 3|Second response.
0 > 3 > 5|Just another response to the second reply.
0 > 3 > 5 > 6|Go deeper.
0 > 4|Third response.
BEGIN TRANSACTION;

CREATE TABLE 'comments'
(
	'id' INTEGER PRIMARY KEY,
	'parent' INTEGER DEFAULT 0,
	'text' TEXT
);

INSERT INTO "comments" ("id","parent","text") VALUES ('1','0','Hello world!');
INSERT INTO "comments" ("id","parent","text") VALUES ('2','1','First response.');
INSERT INTO "comments" ("id","parent","text") VALUES ('3','1','Second response.');
INSERT INTO "comments" ("id","parent","text") VALUES ('4','1','Third response.');
INSERT INTO "comments" ("id","parent","text") VALUES ('5','3','Just another response to the second reply.');
INSERT INTO "comments" ("id","parent","text") VALUES ('6','5','Go deeper.');

COMMIT;

WITH RECURSIVE ctree (clevel, cpath, id, parent) AS
(
	SELECT
		0,
		0,
		id,
		parent
	FROM comments
	WHERE id = "1"
	UNION
	SELECT
		clevel + 1,
		cpath || " > " || comments.id,
		comments.id,
		comments.parent
	FROM comments
	JOIN ctree
		ON ctree.id = comments.parent
) 
SELECT cpath, text FROM ctree
JOIN comments
ON comments.id = ctree.id
ORDER BY ctree.cpath;

Та-дааам!

★★★★★

ну теперь пойми, что это очень неудачное представление древовидных данных в SQL :)

fornlr ★★★★★
()
Последнее исправление: fornlr (всего исправлений: 1)

Та-дааам!

Какая бурный всплеск эмоций.
Что же будет, когда вы узнаете, что в Oracle это есть из коробки?

SELECT id, parent_id FROM table START WITH pid is null 
    CONNECT BY PRIOR id = parent_id;

znenyegvkby
()

А теперь сделай explain и ужаснись что происходит внутри.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от znenyegvkby

Off-topic

Этот коммент находится между двумя понягами.
Вы можете исправить это, оказав посильный вклад для организации атаки с целью получения доступа к серверу и последующему удалению вышеуказанных аватарок!
Высылайте ваши деньги на номер @#$%^&*!@#$%^&*.
Помните: закрывая глаза на это безобразие, вы убиваете культурную составляющую нашей великой родины.

znenyegvkby
()

Молодец, имеешь все шансы дорасти со сторожа до пыхера. Только учитывай, что там большая конкуренция со стороны пятиклассников, придётся тебе демпинговать, чтобы удержаться.

redgremlin ★★★★★
()
Ответ на: комментарий от bookman900

очевидно же

задачу иерархических комментов в бложике

Bad_ptr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.