Musel jsem se vypořádat s podobným problémem nepřirozeným řazením stromu kategorií. Pokud vkládáte všechny řádky pro jedno ID najednou, můžete pro každé podId udělat něco takového:
SET @seq = 0;
INSERT INTO test
(id, subId, text) VALUES
(_id, @seq := @seq + 1, 'Some text')
;
Pokud potřebujete "přidat" řádek k id, můžete nastavit @seq pomocí
SELECT IFNULL(MAX(subId), 0) INTO @seq FROM test WHERE id = _id;
To by samozřejmě vyžadovalo správu id aplikací a ne mySQL.
Můžete to udělat stejně jako poslední blok kódu, abyste získali další dostupné ID.