J'ai une table avec de nombreuses lignes, mais ils sont hors de l'ordre. Je suis à l'aide du champ "ID" comme clé primaire. J'ai aussi un champ "Date" qui est un champ DateTime. P>
Comment puis-je réindex de la table de sorte que les entrées soient identiques dans l'ordre chronologique en fonction du champ de date p>
7 Réponses :
La façon dont je voudrais le faire est de créer une nouvelle table avec l'index d'incrément automatique et de sélectionner tout votre ancienne table à commander par date. Vous pouvez ensuite retirer votre ancienne table. P>
INCROYABLE! Grande solution. Je vais l'appliquer à mon dB en fait.
L'extrait SQL suivant devrait faire ce que vous voulez. Gardez à l'esprit que vous ne pouvez jamais garantir l'ordre d'une colonne incrémentée automatique une fois que vous avez commencé à insérer et à supprimer des données, donc vous ne devrait pas s'appuyer sur une commande, sauf que vous spécifiez à l'aide de la commande par code> dans vos requêtes. C'est une opération coûteuse que vous faites, car elles nécessitent des indices pour être complètement recréées, donc je ne suggérerais pas de le faire souvent. P> P>
Pour récupérer la colonne ID dans la première colonne, ajoutez ceci: ALTER TABLE TEST_TABLE Change ID ID ID INT NON NULL AUTO_INCREMENT PREMIER;
Pourquoi voulez-vous que la séquence d'identifiants soit corrélée aux dates? On dirait que vous voulez faire Les valeurs dans une colonne d'identification automatique d'autocrampe doivent être traitées comme arbitraires. S'appuyant sur vos identifiants étant à la date d'ordre est une mauvaise idée. P> commander par ID code> et que les lignes reviennent à la date d'ordre. Si vous souhaitez ordre des lignes de date, utilisez simplement ordre par date code> à la place. P>
Vous pouvez utiliser Alter Table Commande Par col; La syntaxe autorisée de l'ordre par est comme dans les états sélectionnés. P>
Que diriez-vous de quelque chose comme une requête simple à l'aide d'une variable: Ceci commandera vos lignes comme: 0,1,2,4,5 ... etc. à votre date. < / p> p>
Cela ne réinitialisera pas le compteur d'incrément automatique
J'ai dû changer cette première ligne à Set @row = 0; code> et ensuite cela a fonctionné
Je devais faire quelque chose de similaire. La meilleure façon de le faire était la suivante ( vous pouvez l'exécuter dans une requête SQL si vous le souhaitez, mais à l'esprit à l'esprit que ceci est une opération de consommation lente et très ressources em>): n'oubliez pas de changer "your_table" avec Le nom de votre table et la commande par colonnes.
Ici, je vous explique ce que vous faites de cette façon étape par étape: p>
Si vous utilisez quelque chose comme phpmysql, cela pourrait être atteint par: p>
Que va-t-il faire, dans tous? p>
@WYZARD a fait référence à simplement commander les colonnes par date lorsque vous les récupérez de la table (et non de réindexation). Depuis, en effet, la clé primaire devrait être arbitraire (sauf à toutes les clés étrangères et peut-être la plate-forme de consommation (mais c'est une autre question)). P>
S'attendre à ce que les lignes soient stockées i> dans un ordre particulier dans une base de données relationnelle n'est probablement pas une bonne idée. C'est ce que sont les indices et les commandes. Les identifiants sont juste des identificateurs; Si le tri important est par date / heure, qui se soucie de ce que sont les identifiants?