Mit folgendem SQL lassen sich die Level der Kategorien sowie deren Kinder wieder korrekt reparieren:
Level der Kategorien neu setzen:
UPDATE catalog_category_entity
SET `level` = (LENGTH(path) - LENGTH(REPLACE( path, '/', '' ))+0)
Anzahl der Unterkategorien (Kinder) setzen
CREATE TEMPORARY TABLE `catalog_category_entity_tmp` as
SELECT m.`entity_id`,
(LENGTH(m.`path`) - LENGTH(REPLACE( m.`path`, '/', '' ))+1) as `level`,
COUNT(c.`entity_id`) as `children_count`
FROM catalog_category_entity as m
LEFT JOIN `catalog_category_entity` as c ON c.`parent_id` = m.`entity_id`
GROUP BY m.`entity_id`;
UPDATE `catalog_category_entity` m, `catalog_category_entity_tmp` c
SET
m.`children_count`=c.`children_count`,
m.`level`=c.`level`
WHERE m.`entity_id`=c.`entity_id`;
Benutzung natürlich auf eigene Gefahr :)
Update: Das SQL habe ich mit dem Kommentar von André Willing ergänzt. Danke für das Mitdenken an ihn.