Pues para mi es un problema de logica
esto deberia resolver el problema sin programar la logica de datos en la de negocios
Lo unico que hice fue crear una foreign key a la primary key, delete on cascade, update on cascade
he aqui el sql
CREATE TABLE IF NOT EXISTS `test`.`familia` (
`idfamilia` INT(11) NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`idpadre` INT(11) NULL ,
PRIMARY KEY (`idfamilia`) ,
INDEX `fk_familia_familia` (`idpadre` ASC) ,
CONSTRAINT `fk_familia_familia`
FOREIGN KEY (`idpadre` )
REFERENCES `test`.`familia` (`idfamilia` )
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
que conste que lo he probado antes
con los mismos datos que has puesto