Je devais faire quelque chose de similaire. La meilleure façon de le faire est la suivante (vous pouvez l'exécuter dans une requête SQL si vous voulez, mais gardez à l'esprit que cette opération est consomme beaucoup de ressources lent et très):
ASSUREZ-VOUS A SAUVEGARDE DE VOTRE TABLE, Y COMPRIS LA STRUCTURE ET LES DONNÉES AVANT DE COMMENCER CETTE INTERROGATION!
ALTER TABLE your_table ADD COLUMN temp_id INT UNSIGNED NOT NULL;
SET @a:=0;
UPDATE your_table SET [email protected]:[email protected]+1 ORDER BY `date` ASC;
ALTER TABLE your_table DROP id;
ALTER TABLE your_table CHANGE temp_id id INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);
ALTER TABLE your_table CHANGE COLUMN id id INT(10) FIRST;
Il suffit de ne pas oublier de changer « your_table » avec le nom de votre table, et l'ordre des colonnes. Ici, je vous expliquer ce que vous faites cette étape de façon à pas:
- D'abord, vous ajoutez une nouvelle colonne nommée « temp_id » (assurez-vous que ce n'est pas un nom que vous utilisez déjà);
- Ensuite, vous ajoutez une variable temp égale à 0 (ou à ce que vous voulez pour votre ID à partir de);
- Ensuite, vous mettez à jour votre table, rangée par rangée par la logique ORDER, en définissant une valeur pour votre nouvelle colonne "temp_id" égale à la variable que vous avez définie, puis incrémentez cette variable par 1 (vous pouvez faire quelque chose de funky ici, par exemple si vous voulez que vos identifiants soient toujours pairs, vous pouvez définir @ a + 2);
- L'étape suivante consiste à supprimer (supprimer) votre ancien ID de colonne;
- Ensuite, vous changez le nom de votre colonne temp_id en ID et en entier positif avec incrément automatique qui est la clé primaire de votre table.
- Parce que ID est maintenant la colonne temp_id nouvellement ajoutée, il se trouve à la fin de votre structure de table. Pour le déplacer à nouveau en tant que première colonne, vous exécutez la dernière requête, pour vous assurer que c'est la première colonne.
S'attendre à ce que les lignes soient * stockées * dans un ordre particulier dans n'importe quelle base de données relationnelle n'est probablement pas une bonne idée. C'est à cela que servent les index et les ORDER BY. Les ID sont juste des identifiants; si le type important est par date/heure, qui se soucie de ce que sont les identifiants? – Joe