DELIMITER $$
DROP FUNCTION IF EXISTS `helpdesk`.`ISCHILDOF`$$
CREATE DEFINER=`matt`@`%` FUNCTION `ISCHILDOF`(cID INT, pID INT) RETURNS tinyint(1)
READS SQL DATA
BEGIN
DECLARE currentChild INT;
DECLARE res BOOL;
DECLARE cur CURSOR FOR SELECT parentId FROM categories WHERE categoryId = currentChild;
IF (pID = 0) THEN
RETURN true;
END IF;
SET res = false;
SET currentChild = cID;
WHILE (currentChild != 0) DO
IF (currentChild = pID) THEN
SET res = true;
SET currentChild = 0;
ELSE
OPEN cur;
FETCH cur INTO currentChild;
CLOSE cur;
END IF;
END WHILE;
RETURN res;
END$$
DELIMITER ;
=================================================
mysql> SELECT * FROM categories;
+------------+----------+------------------------+
| categoryId | parentId | description |
+------------+----------+------------------------+
| 1 | 0 | DealerPro |
| 123 | 1 | sdagsdgaga |
| 124 | 122 | sdagdgag |
| 125 | 124 | sdaggdasga |
| 122 | 1 | sdg |
| 120 | 119 | New Categorygdsagdsaga |
| 98 | 0 | EasyServe |
| 97 | 0 | EasySale |
+------------+----------+------------------------+
8 rows in set (0.00 sec)
=================================================
DELETE FROM categories WHERE ISCHILDOF(categoryId, 1) OR categoryId = 1