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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.