WITH RECURSIVE `cte` (`id`, `parent_id`, `title`, `n`) AS (
SELECT `id`, `parent_id`, `title`, 0
FROM `table`
WHERE `id` = :categoryId
UNION
SELECT `t`.`id`, `t`.`parent_id`, `t`.`title`, `n`+1
FROM `cte`
JOIN `table` AS `t` ON `t`.`id` = `cte`.`parent_id`
)
SELECT `id`, `title`
FROM `cte`
ORDER BY `n` DESC
Остаётся только выбрать все строки из ответа и вывести их в цикле. $data = [[
"id" => 25,
"pid" => "0CjqYfx3NU1AghsPVoGFullXwl4umV",
"message" => "Одно лишь ё - это безумие!"
]];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
/*
[
{
"id": 25,
"pid": "0CjqYfx3NU1AghsPVoGFullXwl4umV",
"message": "Одно лишь ё - это безумие!"
}
]
*/