История изменений
Исправление alex_the_v, (текущая версия) :
хранят как «собранный» путь, так и parent_id
Разумная тема, кстати. Spoofing, ты слышишь?
cамое быстрое, когда требуется выборка по конкретному пути
Рекурсивный SQL все равно будет быстрее и удобнее в большинстве задач. Путь собрать - тоже невелика проблема:
with threads_recursive (comment_id, comment_data, comment_path) as (
select i.comment_id,
i.comment_data
i.comment_id as comment_path
from comments i
where i.comment_id = 1
union all
select c.comment_id,
c.comment_data
p.comment_path || c.comment_id as comment_path
from threads_recursive p
inner join comments c on c.parent_id = p.comment_id
) select * from threads_recursive;
А вот если тебе наоборот надо будет достать айдишники из готового пути в VARCHAR, то придется поизвращаться.
А вообще, если ты уж пишешь веб-приложение на пыхе, то надо пользоваться ORM и не морочить себе голову.
Исправление alex_the_v, :
хранят как «собранный» путь, так и parent_id
Разумная тема, кстати. ТС, ты слышишь?
cамое быстрое, когда требуется выборка по конкретному пути
Рекурсивный SQL все равно будет быстрее и удобнее в большинстве задач. Путь собрать - тоже невелика проблема:
with threads_recursive (comment_id, comment_data, comment_path) as (
select i.comment_id,
i.comment_data
i.comment_id as comment_path
from comments i
where i.comment_id = 1
union all
select c.comment_id,
c.comment_data
p.comment_path || c.comment_id as comment_path
from threads_recursive p
inner join comments c on c.parent_id = p.comment_id
) select * from threads_recursive;
А вот если тебе наоборот надо будет достать айдишники из готового пути в VARCHAR, то придется поизвращаться.
А вообще, если ты уж пишешь веб-приложение на пыхе, то надо пользоваться ORM и не морочить себе голову.
Исходная версия alex_the_v, :
хранят как «собранный» путь, так и parent_id
Разумная тема, кстати.
cамое быстрое, когда требуется выборка по конкретному пути
Рекурсивный SQL все равно будет быстрее и удобнее в большинстве задач. Путь собрать - тоже невелика проблема:
with threads_recursive (comment_id, comment_data, comment_path) as (
select i.comment_id,
i.comment_data
i.comment_id as comment_path
from comments i
where i.comment_id = 1
union all
select c.comment_id,
c.comment_data
p.comment_path || c.comment_id as comment_path
from threads_recursive p
inner join comments c on c.parent_id = p.comment_id
) select * from threads_recursive;
А вот если тебе наоборот надо будет достать айдишники из готового пути в VARCHAR, то придется поизвращаться.
А вообще, если ты уж пишешь веб-приложение на пыхе, то надо пользоваться ORM и не морочить себе голову.