Réordonner une table sql après un 'delete'

benassis

Membre confirmé
10 Janvier 2006
73
0
Bonjour,

Je cherche un moyen de réordonner une table après l'effacement d'une rangée de données.
Je m'explique.
J'ai une table contenant un champ 'id' qui est une clé primaire auto_increment. À chaque enregistrement, comme on le sait, le 'id' va s'incrémenter dans un ordre ascendant comme dans l'exemple suivant:
http://jlemser.com/id-avant.php

Mais si j'élimine un enregistrement comme dans l'exemple suivant, la clé primaire ne va pas changer.

http://jlemser.com/Id_apres.php
Ici, l'enregistrement 'id' numéro 3 est disparu.
J'aimerais pouvoir, après chaque élimination d'un champ, réordonner la table pour que le champ 'id' se retrouve dans un ordre ascendant continu.
Merci
 
Ce que tu veux faire ne me semble pas une bonne idée ;)
Si ta colonne "id" est la primary key de ta table, la changer implique de changer également toutes les dépendances. Et pourquoi voudrais-tu avoir une liste sans trous, quel est l'intérêt ?
 
Une id est une clé d'identification qui est pour sql unique pour la fiche. Quand la fiche est supprimée, l'id reste en quelque sorte assignée à celle-ci.

La seule raison pour laquelle il faudrait réorganiser la table comme tu le souhaite serait l'utilisation directe depuis le client ou PhpMyAdmin -> esthétique

Si il y a une vrai nécessité, un bout de code côté serveur pourra le faire de manière assez compliquée (stockage de l'id dans un tableau par exemple puis comparaison avec la précédente. Si la différence n'est pas 1 [ arr[2] != arr[1] + 1 ], alors on fait le changement pour la fiche concernée, et certainement pour celles qui suivreront)

Par contre au niveau de la base de données, elle incrémentera depuis la dernière je pense (dernière utilisée et non la dernière modifiée).
 
Ce que tu veux faire ne me semble pas une bonne idée ;)
Si ta colonne "id" est la primary key de ta table, la changer implique de changer également toutes les dépendances. Et pourquoi voudrais-tu avoir une liste sans trous, quel est l'intérêt ?
Je croyais qu'après un effacement la clé était réordonnée automatiquement de telle sorte qu'en connaissant le nombre d'enregistrements restant
Bloc de code:
$lastid = mysql_numrows($Resultat);
j'avais automatiquement le dernier no de l'id et ce n'est pas le cas !:p
Comme j'assignais un numéro à un nouveau membre en me basant sur le nombre d'enregistrements, après un delete je me retrouvais avec des membres ayant des nos identiques:heu: .

Il apparaît que la méthode pour assigner un no de membre devra être corrigée !

Merci pour votre aide, sebastiend et molgow
 
Ce n'est vraiment pas une bonne idée de prendre le dernier pour compter le nombre de lignes ;)

Il y a la fonction "SELECT count(1) FROM matable".
 
si tu veux récupérer l'id du dernier enreg créé pour alimenter d'autres tables, il suffit d'utiliser la fonction adéquate (pour php et mysql):
$ID = mysql_insert_id();