Petite question mysql pour grands spécialistes

WRInaute impliqué
Salut,

Petite question mysql pour grands spécialistes

j'ai une table "users" qui contient entre autre "id" (cle primaire) , "nom" ...
j'ai d'autres tables "budget" "agenda" etc ... qui ont la structure suivante "id" (cle primaire) , id-user (cle etrangere poitant sur "id" de la table "users") ...

Pour des raisons de commodité dans des développements futurs, j'ai besoin dans ma table "users" de créer le champ "new-id" qui adoptera une nouvelle codification et qui deviendra la clé primaire (a terme "id" pourra être suppprimé).

comment faire pour que les champs "id-user" des tables liées soient aussi modifiée pour pointer correctement sur "new-id" de la table user ?

je ne me lancerai pas tant que je n'aurai pas une solution 100% fiable car je risque de me faire crever les yeux par les quelques 2000 personnes qui se servent de mes outils
 
WRInaute discret
Bonjour
C'est très risqué de changer de clef et en général c'est à proscrire... Si toutefois tu n'as pas le choix tu peux toujours faire une UPDATE sur tes autres tables. Tu récupères le "id_user" des autres tables et tu l'UPDATE avec le "new_id" correspondant (la correspondance tu la trouve dans ta table "users").
 
WRInaute impliqué
Ton "new-id", c'est toi qui le spécifie à la main pour chaque enregistrement dans "users" ?

Ensuite pour updater les autres tables:

Code:
UPDATE budget t1, users t2 SET t1.`id-user`=t2.`new-id` WHERE t1.`id-user`=t2.id;

Code:
UPDATE agenda t1, users t2 SET t1.`id-user`=t2.`new-id` WHERE t1.`id-user`=t2.id;

...
 
WRInaute impliqué
Ton "new-id", c'est toi qui le spécifie à la main pour chaque enregistrement dans "users" ?

Non en PHP , en fait je vais m'en sortir avec :

Code:
$res = mysql_query("SELECT `id`, `login` FROM `users`");
   while ($row = mysql_fetch_row($res)) {
      $id = $row[0];
      $newid = crc32(encodeurl($row[1]));
      mysql_query("UPDATE `users` SET `newid`='".$newid."' WHERE `id`='".$id."'");
      mysql_query("UPDATE `agenda` SET `user`='".$newid."' WHERE `user`='".$id."'");
      mysql_query("UPDATE `budget` SET `user`='".$newid."' WHERE `user`='".$id."'");
      mysql_query("UPDATE `invites` SET `user`='".$newid."' WHERE `user`='".$id."'");
}

avec encodeurl qui est une fonction a moi pour faire des url propres avec tirets a partir d'une phrase.

Tu peux faire une sauvegarde de ta base MySQL avant toute modification. Ça peut être utile

bonne idée :D
 
Discussions similaires
Haut