|
|
|
| Есть табица комментариев:
CREATE TABLE IF NOT EXISTS `Comment` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`ParentId` int(11) NOT NULL,
...
) ENGINE=InnoDB
необходимо рекурсивно подсчитать количество комментариев, при этом комментарий может быть снова прокомментирован, т.е.
Комментарий 1
Комментарий 1 1
Комментарий 1 2
Комментарий 1 2 1
Комментарий 1 2 2
Комментарий 1 3
и т.д.!
В Id хранится идентификатор комментария в ParentId - ссылка на Id соответственно.
Хотел хранимыми функциями или процедурами но пишет нельзя их использовать рекурсивно. | |
|
|
|
|
|
|
|
для: serenya1983
(12.02.2011 в 11:23)
| | Хм... странно, вообще-то хранимые процедуры можно использовать рекурсивно. | |
|
|
|
|
|
|
|
для: cheops
(12.02.2011 в 11:52)
| | вот ошибка при вызове рекурсивно:
Recursive stored functions and triggers are not allowed.
CREATE FUNCTION `_CountComment` (_ParentId BIGINT) RETURNS INT
BEGIN
DECLARE mCount INT DEFAULT 0;
DECLARE done INT DEFAULT 0;
DECLARE sId BIGINT DEFAULT 0;
DECLARE rCount INT DEFAULT 0;
DECLARE rCursor CURSOR FOR SELECT Id FROM Comment WHERE ParentId=_ParentId;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN rCursor;
FETCH rCursor INTO sId;
WHILE done = 0 DO
SELECT _CountComment(sId) INTO rCount;
SET mCount=mCount+1+rCount;
FETCH rCursor INTO sId;
END WHILE;
CLOSE rCursor;
RETURN mCount;
END
|
| |
|
|
|