mysql, incrémenter une sous-chaine au mieux ?

WRInaute discret
bonsoir,

je sollicite votre sagacité pour m'indiquer s'il existe une façon très simple et optimisée d'incrémenter une sous-chaine. Je m'explique avec un exemple ça sera bien plus facile !!

Donc soit, une rubrique d'une table qui contient des chaines de ce type :

01-01-01
01-01-02
01-02-01
01-02-02
01-02-03
01-03-
02-01-01
02-01-02
02-02-
02-03-01
02-03-02

(en gros ça représente une sorte de plan : grand I/A/1. Donc dans le grand I on a un A et un B, le A contient 01 et 02 et le B 01,02,03... OK ?)

je souhaiterais pouvoir "insérer" dans ce plan une sous-rubrique et donc décaller les suivantes ! Ainsi insérer derrière 01-02-01 une rubrique... donc :
01-02-02 -> 01-02-03
01-02-03 -> 01-02-04

et les autres ne bougent pas...

En gros ça revient à dire que pour tous les enregistrements dont le numéro de niveau est supérieur à un numéro donné, il faut incrémenter de 1 ! (vous me suivez toujours ?? ;) )

Sachant qu'ici c'est le dernier numéro qui est incrémenté, mais ça pourrait être : j'insère une sous-rubrique derrière 01-01 donc
01-02-* --> 01-03-*
01-03-* --> 01-04-*

VOilà !! J'avoue qu'à part en m'embarquant dans des boucles php qui ne me paraissent pas du meilleur goût, j'ai un peu de mal à apréhender ce problème ! :oops: Si on pouvait dire sous forme d'une requête mysql :
pour tous les enregistrement supérieurs répondant à ce format "01-[0-9]{2}.*" on incrémente la sous-chaine 2 (ou 3 ou 4), j'avoue que ça m'arrangerait ! mais là je suis largué !!

Merci d'avance pour votre aide !
 
WRInaute discret
euh si c'est pas suffisement clair (j'ai un peu de mal à expliquer ce que je veux, sûrement aussi pour ça que j'ai du mal à le faire ;)), demandez moi où c'est le plus flou ;)
 
WRInaute discret
bon j'ai pas du me faire trop comprendre j'ai l'impression ;) !

bon à force de chercher je commence à trouver un petit quelques chose qui fait presque ce que je veux :


Code:
UPDATE rubriques
   SET num=CONCAT(SUBSTRING(num FROM 1 FOR 3),SUBSTRING(num FROM 4 FOR 2)+1,SUBSTRING(num FROM 6))
 WHERE num REGEXP '^01\-' 
   AND SUBSTRING(num FROM 4 FOR 2) > 01

bon bien sûr faut adapter via des variables les valeurs chiffrées de la requête mais ça devrait le faire... Mais je pers le format sur 2 chiffres de ma sous-chaine ainsi...
c à dire que 01-02-01 devient par exemple 01-3-01

Je vais sûrement faire une deuxième requête filtre sur les sous-chaines à 1 chiffre pour leur remettre le 0 devant... Si y'a une soluce en une requête je suis preneur !
 
Discussions similaires
Haut