Jeg var nødt til at håndtere et lignende problem ved at bestille et kategoritræ unaturligt. Hvis du indsætter alle rækkerne for et id ad gangen, kan du gøre sådan noget for hvert subId:
SET @seq = 0;
INSERT INTO test
(id, subId, text) VALUES
(_id, @seq := @seq + 1, 'Some text')
;
Hvis du skal "føje" en række til et id, kan du sætte @seq med
SELECT IFNULL(MAX(subId), 0) INTO @seq FROM test WHERE id = _id;
Dette vil selvfølgelig kræve styring af id af applikationen og ikke mySQL.
Du kan gøre det samme som den sidste kodeblok for også at få det næste tilgængelige id.