LINUX.ORG.RU

История изменений

Исправление 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 и не морочить себе голову.