2010-07-16 6 views
2

Disons que j'ai une table (disons 50 lignes, 50 colonnes) à laquelle je dois occasionnellement faire de petites modifications. Bien que je réalise que je pourrais être (peut-être certains d'entre vous me diront que je devrais l'être) en utilisant la requête pour cela, j'aime utiliser un programme de gestion de base de données (comme Sequel Pro) pour faire des changements à la main.Trier les champs de la table mySQL

J'ai donc deux questions:

Lorsque vous effectuez une requête sans spécifier l'ordre pour afficher les résultats, il suit l'ordre qu'il est enregistré dans la base de données. Est-il possible de changer cet ordre (pas l'ordre de vos résultats, l'ordre dans la table elle-même) sans changer manuellement les lignes?

De même, existe-t-il un moyen de trier automatiquement la manière dont les champs apparaissent dans le tableau (l'ordre des colonnes)? Je sais que je devrais juste utiliser des requêtes pour changer les valeurs, mais (imo) si la table est assez petite, je trouve plus facile de trouver la ligne et la colonne dans un programme comme Sequel Pro et de le changer comme ça .

De plus, si mes méthodes sont complètement faux, s'il vous plaît me dire

Répondre

3

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

ALTER TABLE name ORDER BY something 

Il est livré avec quelques mises en garde lourdes, et ne comptez pas sur eux pour quoi que ce soit d'autre, alors peut-être un peu de gain très faible performance dans le tri par celui-ci, de juste pour votre commodité dans les outils qui exécutent des sélections arbitraires sans une commande par:

ORDER BY vous permet de c Reate la nouvelle table avec les lignes dans un ordre spécifique. Notez que la table ne reste pas dans cet ordre après les insertions et les suppressions. Cette option est surtout utile lorsque vous savez que vous devez interroger les lignes dans un certain ordre la plupart du temps. En utilisant cette option après des changements majeurs dans la table, vous pourriez obtenir des performances plus élevées. Dans certains cas, cela pourrait rendre le tri plus facile pour MySQL si la table est en ordre par la colonne que vous voulez commander plus tard.

+0

Dans les cas généraux (plus de lectures que de modifications), puis-je dire qu'il est préférable de réordonner ma table à chaque modification puisque toutes les lectures seront commandées? Même si la table devient grande ?! – cvsguimaraes

+1

@cvsguimaraes: vous pouvez tester cela, mais j'en doute beaucoup. Rendre une opération d'écriture ÉNORME en raison de la réorganisation de verrouillage n'aiderait pas la plupart des applications occupées. Avoir un index sur la colonne que vous sélectionnez et commandez est généralement beaucoup plus utile, surtout si vous avez seulement besoin des colonnes dans cet index.Si les écritures sont vraiment rares (quelques unes par jour, ou les écritures arrivent en rafales tous les quelques jours), cela peut être bénéfique, mais personnellement je ne conseillerais que si pour des tables (presque) statiques (quelque chose comme une table de code postal fixe et comme), où vous pourriez vouloir une mise à jour tous les quelques mois ou plus. – Wrikken

1

Lorsque vous effectuez une requête sans spécifier l'ordre pour afficher les résultats, il suit l'ordre qu'il est enregistré dans la base de données. Est-il possible de changer cet ordre (pas l'ordre de vos résultats, l'ordre dans la table elle-même) sans changer manuellement les lignes?

n °

est-il possible de trier automatiquement la façon dont les champs apparaissent dans le tableau (l'ordre des colonnes)?

La base de données ne se soucie pas de l'ordre des colonnes. On me dit que vous pouvez exécuter une instruction à partir de certaines IDE SQL qui utilisent des colonnes, mais il crée une nouvelle table qui transfère les données sous les couvertures.

0

CITER OMG Poneys

Lorsque vous effectuez une requête sans spécifier l'ordre pour afficher les résultats, il suit l'ordre qu'il est enregistré dans la base de données. Est-il possible de changer cet ordre (pas l'ordre de vos résultats, l'ordre dans la table elle-même) sans changer manuellement les lignes?

n °

et d'ajouter, vous pouvez non seulement changer pas, mais

il suit l'ordre qu'il est enregistré dans la base de données

n'est pas nécessairement correct. L'ordre dans lequel les enregistrements sont renvoyés à partir de la base de données n'est pas garanti dans aucun ordre spécifique, SAUF si vous utilisez une clause ORDER BY.

En plus d'avoir un script SQL pratique qui formate votre tableau dans l'ordre et les colonnes que vous voulez et que vous pouvez simplement coller à chaque fois que vous vouliez effectuer un changement, je ne peux vraiment pas vous aider.

par exemple

Select ID, FirstColumn, ThirdColumn, SecondColumn from myConfigTable 
Order By FieldToOrder 
+0

L'ordre d'insertion est généralement garanti si aucun ORDER BY n'est présent. –

+0

Généralement et garanti ne sont pas deux mots que je mettrais ensemble. Généralement la commande est la même, mais il n'est pas garanti d'être. Cependant, il est garanti de changer juste quand vous comptez sur lui pour ne pas le faire. :) –

+0

Selon le fournisseur de la base de données - il est difficile de garantir quoi que ce soit dans ce domaine. –

0

Idem sur commande imprévisible. Si vous voulez les lignes dans un certain ordre, c'est ce que ORDER BY est pour. Pour être sarcastique, votre question est comme demander, "Comment puis-je faire tourner ma voiture à gauche sans utiliser le volant?" Même s'il y a un moyen compliqué d'y parvenir, à quoi cela sert-il?

Ordre des colonnes RE: MySQL a une extension à la norme SQL qui vous permet de réorganiser l'ordre des colonnes dans une table. Je crois que c'est

ALTER TABLE mytable MODIFY mycolumn varchar(50) AFTER othercolumn; 

Cela va déplacer la colonne "mycolumn" à venir après "othercolumn". Je pense que vous devez donner le type de données - varchar (50) dans cet exemple mais bien sûr cela pourrait être n'importe quoi - même s'il n'est pas changé.

Pour faire d'une colonne la première colonne, vous dites FIRST au lieu de AFTER quelque chose.

Notez que ce n'est pas standard SQL. La plupart des moteurs SQL ne vous permettent pas de spécifier l'ordre des colonnes. Certains puristes insistent sur le fait que l'ordre des colonnes n'existe pas, qu'une rangée est une collection de colonnes sans ordre particulier. Dans la vraie vie, cependant, le moteur de base de données doit les stocker dans un certain ordre, et je n'ai jamais vu une base de données où "select *" n'a pas retourné les colonnes dans un ordre cohérent. Personnellement, j'écris souvent du code générique qui construit des écrans de saisie de données à partir du schéma, et liste les champs dans l'ordre où ils reviennent d'un "select *". J'aime MySQL pour ce genre de programme car il me permet de spécifier l'ordre des colonnes dans la base de données, plutôt que d'avoir à le superposer ailleurs ou de reconstruire une table pour obtenir l'ordre désiré.

Je ne suis pas familier avec SQL Pro mais la plupart des outils respecteront l'ordre des colonnes du SGBD.

Questions connexes