mysqlhierarchical-datathreaded-comments

What is the best practice for fetching a tree of nodes from database for further rendering?


Let's say we have a table with user comments. First-level comments have a reference to an article they are attached to. Deeper-level comments do not have this reference by design but they have a reference to it's parent comment.

For this database structure - what would be the most efficient way to fetch all comments for a given article and then render it in html format? (Let's assume that we have approx. 200 comments of first level and the deepiest level of 20)


Solution

  • I usually recommend a design called Closure Table.

    See example in my answer to What is the most efficient/elegant way to parse a flat table into a tree?

    I also designed this presentation: Models for Hierarchical Data with SQL and PHP. I developed a PHP app that render a tree in 0.3 seconds, from a collection of hierarchical data with 490k nodes.

    I blogged about Closure Table here: Rendering Trees with Closure Table.

    I wrote a chapter about different strategies for hierarchical data in my book, SQL Antipatterns Volume 1: Avoiding the Pitfalls of Database Programming.