Problème de id!!

Résolu
pourry Messages postés 8 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 15 avril 2008 - 15 avril 2008 à 21:11
pourry Messages postés 8 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 15 avril 2008 - 15 avril 2008 à 23:21
    Salut a tous,j'ai de nouveau un petit soucis avec le transfert de ma base de données vers une autre.
Je vais essayer de m'expliquer vite fait et clairement: j'ai su grace a vous et le site (et particulièrement yoman64 ) commencer le transfert de ma bd mais dans une des tables (une de l'ancienne bd nous diront) j'ai des id non incrémenté automatiquement et qui se repete en double la plupart du temps (2xid 1 ,2xid2, 2xid3....), car l'ancienne table contenait les informations pour deux langues différentes (néerlandais et francais)
La nouvelle table  qui doit recevoir ces informations est configurée avec un id incrementé automatiquement (parce qu'il n'y a qu'une seule langue a gérer dans cette nouvelle bd)
J'aurai voulu savoir comment j'aurai pu récuperer les id de l'ancienne table mais en un seul exemplaire (dans l'ordre croissant de l'ancienne table les id francais était toujours au dessus de leurs id similaires néerlandais) ??
J'ai essayé en bouclant les id incrémenté de ma nouvelle table mais je m'y suis perdu et cela m'a généré un affichage infini des éléments de la table lol...
Merci d'avance pour votre aide,je sais que vous pourrez m'éclaircir
J'espere avoir été assez claire ,j'ai essayé de faire cours pour pas prendre la tete
A bientot

4 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 avril 2008 à 22:51
Salut,

Le truc, c'est qu'il aurait fallu prévoir ce problème avant... Parce qu'après, c'est forcément galère...
Pour faire un truc rapide, il faudrait que tu puisses différencier les champs "fr" des champs"nl". Soit une valeur différente dans un champ, soit... euh...
Si tout ce que tu as c'est qu'ils sont "avant", c'est pas gagné...
On va commencer comme ça : est-ce qu'il y a un champ qui a une valeur propre à chaque langue ? Même si c'est une partie de la valeur... ?

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
3
pourry Messages postés 8 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 15 avril 2008
15 avril 2008 à 22:59
C'est que la base existait a mon arrivée et que étant donné qu'elle contient 600 enregistrement ca me paraissait galere de les refaires a la main.
Effectivement certaine table contenait un champ lg avec les parametres fr et nl mais si tu veux dans l'ancienne base de donnée il y avait aussi une table de jointure regroupant les id de deux autre table (categorie et jeux) mais que dans la nouvelle base la configuration a été faite pour qu'il n'y ai plus de table de jointure mais juste un champ id_categorie dans la table jeux...
Donc en plus de devoir transférer ces ancien id,je dois pouvoir faire la distinction entre ceux ci par rapport a leur langue respective...
Je tourne en rond et je ne peux malheureusement pas modifier les parametres de configuration de la nouvelle base car les scripts la faisant fonctionné ont déja été fait.
J'ai hélas pensé a devoir les réintroduire un a un mais ca va me prendre un temps assez long (en plus il faut que je réidentifie chaque id par rapport au table respective )
En tout cas merci de ton attention
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 avril 2008 à 23:10
Re,

Enlever une jointure dans ce cas là, c'est une régression... La jointure était nécessaire sur le plan conceptuel et logique... Bref...

Bon donc t'as un champ qui contient fr ou nl...

Si tu dois exécuter cette opération une seule fois, pas la peine de chercher à optimiser...

Commence par chercher les enregistrements d'une langue :
$sql = "SELECT * FROM nom_de_la_table WHERE lg='en';";

Tu fais ensuite une boucle qui va modifier l'id de chaque enregistrement récupéré
$resultat = mysql_query($sql);
$compteur = X; // remplacer X par la valeur que tu veux pour le premier id de cette langue
while ($enr = mysql_fetch_assoc($resultat)) {
mysql_query('UPDATE le_nom_de_la_table SET id='.$compteur.' WHERE id='.$enr['id']);
$compteur++;
}

Un truc dans le genre.
Ensuite, tu modifies l'auto_increment de ta table :
ALTER nom_de_la_table AUTO_INCREMENT=max(id);

C'est non testé, c'est peut-être pas exactement ça mais l'idée est là. Fais une sauvegarde de la table avant d'y faire des changements comme ça... On sait jamais.
<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
pourry Messages postés 8 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 15 avril 2008
15 avril 2008 à 23:21
Je vais essayer cela demain car les fichiers sont a mon stage et te tiendrais au courant de la solution que j'ai éventuellement trouvé si tu veux.
Mais en tout cas merci beaucoup de ta réponse,je vais essayer ta méthode avec la boucle et aussi étudier ce paramètre AUTO_INCREMENT que je ne connaissais pas.
A bientot
0
Rejoignez-nous