Bonjour,
J'ai une table d'utilisateurs comprenant un champ idUser et un champ nom_utilisateur.
J'ai une autre table pour gérer des affinités entre utilisateurs. A chaque utilisateur sont associés les utilisateurs "amis", hiérarchisés selon une note d'affinité.
Les champs de cette table ressemblent à ceci :
Index, idUser, idUser01, note01, iduser02, note02, ... idUser20, note20.
Il peut arriver qu'un utilisateur disparaisse.
Je le supprime donc de la table des utilisateurs.
Je le supprime aussi de la table des affinités (suppression de la ligne où idUser = le numéro de l'utilisateur supprimé).
Mais ce numéro peut aussi exister zéro ou une fois dans chacune des autres lignes, par exemple dans idUser05 pour l'utilisateur U et dans idUser12 pour l'utilisateur U+n, à chaque fois suivi par la note d'affinité avec l'utilisateur considéré (note05 pour U et note12 pour U+n).
Il faut donc supprimer pour l'un idUser05 et note05 pour l'un, et idUser12 et note12 pour l'autre. Enfin, il faut décaler les valeurs des champs qui viennent après :
Pour l'idUser n° U, idUser05 prendra la valeur de idUser06, qui prendra la valeur de id07, etc. et id20 prendra la valeur 0.
Le notes seront décalées elles aussi : note05 prendra la valeur de note06, qui prendra la valeur de note07 etc., note20 passant à 0.
Pour l'idUser n°U+n, même traitement récursif, avec un décalage à partir de l'idUser12 et de la note12.
Le problème consiste donc à repérer les lignes où l'id de l'utilisateur supprimé apparait et, dans ces lignes, à effectuer le décalage récursif des champs.
Et là, je coince un p'tit peu pour trouver des requêtes SQL à la fois efficaces et judicieuses...
Si quelqu'un a l'expérience de ce genre de problème, je suis preneur d'infos, merci !