CREATE TABLE `comments` (
`comment_id` int NOT NULL,
`user_id` int DEFAULT NULL,
`comment` varchar(32) DEFAULT NULL,
`post_id` int DEFAULT NULL,
`parent_comment_id` int DEFAULT NULL,
PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
WITH RECURSIVE cte AS
( SELECT
comment,
comment_id AS path,
user_id,
post_id
FROM
comments
WHERE parent_comment_id IS NULL
UNION ALL
SELECT
child.comment,
CONCAT(parent.path,'/',child.name) AS comment_id,
user_id,
post_id
FROM
comments parent , comments child
WHERE
child.parent_comment_id = parent.comment_id )
SELECT * FROM cte;
ERROR 1054 (42S22): Unknown column 'parent.path' in 'field list'
First time trying recursive sql query.
The query is not working for me. Can some one please help to fix the recursive query ?
There are several things to change in your example, so this question isn't a duplicate of some past question.
Notes:
comment_idis an int, it must be cast to a string in the base case query, or else concatenation in the recursive case query won't work.comment_idas well as the concatenated path, to make it easier to join to the child elements in the recursive case.JOINsyntax instead of the outdated "comma join" syntax.Dbfiddle to demo: https://dbfiddle.uk/ttB_0PSJ