2010-09-03 10 views
1

OK, une base de données d'informations. Une colonne dédiée à un ordre d'affichage. Si j'apporte des modifications, comme déplacer des lignes ou supprimer des lignes ou ajouter des lignes à la fin de la base de données, déplacez-les vers le haut ou vers le bas.MySql - Gérer un ordre d'affichage des données

Je préférerais garder l'ordre d'affichage dans l'ordre séquentiel sans lacunes. comme 1-2-3-4-5-6-7-8-9 si je supprime une ligne 1-2-3-4-5-7-8-9 Je peux avoir un problème plus tard si je veux ajouter une ligne après la ligne 5 (en position 6). Je penserais à garder ces chiffres séquentiels sans lacunes. Est-ce correct? J'ai essayé:

ALTER TABLE data DROP id;

ALTER TABLE data ADD id int(10) AUTO_INCREMENT;

Je sais que ce n'est pas une bonne chose. En outre, lors des tests, il n'a pas conservé mes données dans l'ordre.

Des idées sur la gestion d'un ordre d'affichage? Est-ce que je vais devoir charger toutes les données dans un tableau et les gérer là? On dirait que MySql aurait déjà une solution ???

Répondre

0

La solution que je travaillais sur était d'avoir une colonne pour afficher les données dans l'ordre. J'utilise la colonne AUTO_INCREMENT pour suivre le specific_id pour chaque entrée.

Les colonnes sont: auto_id | display_order | specific_id | category | subject | text

Lors de la saisie de nouvelles données. Je INSERT une nouvelle ligne à la fin de la table. Ensuite, en utilisant mysql_insert_id() je récupère le numéro AUTO_INCREMENT, j'utilise SELECT MAX(display_order) pour obtenir le nombre élevé de display_order, puis UPDATE la nouvelle ligne avec mes données et de mettre le numéro AUTO_INCREMENT dans la colonne specific_id parce que je réellement besoin/utiliser ce numéro.

En utilisant la colonne display_order comme référence, je peux déplacer l'information (specific_id | category | subject | text) à n'importe où. Au lieu de simplement changer le numéro display_order, je choisis de déplacer les informations et de laisser la colonne display_order en séquence (la plupart du temps) avec la colonne AUTO_INCREMENT. Juste une préférence personnelle.

Lors de la suppression d'une ligne. Encore une fois, en utilisant le display_order je déplace les informations vers le bas (numériquement), puis DELETE la dernière ligne de la table. Encore une fois, la préférence personnelle, garde les choses propres.

Les avantages sont: 1) Tout est dans une table. 2) J'utilise le numéro AUTO_INCREMENT pour donner à chaque entrée de données un specific_id, qui était un must have.3) Pas d'espace dans la colonne display_order, recherche/référencement, calcul des positions et brassage de l'information sans erreur.

Autres remarques: Lorsque je fais référence à des blocs de données, j'utilise les codes ORDER BY display_id et ORDER BY display_id DESC pour garder les choses en ordre.

1

Je crains que les champs AUTO_INCREMENT ne les réordonnent pas, il vaudrait mieux ajouter un champ de tri.

1

SQL a la syntaxe ORDER BY pour cela même. Aucune base de données officielle ne garantit l'ordre dans lequel les données sont stockées ou l'ordre dans lequel les données sont extraites, sauf si un ORDER BY est spécifié dans l'instruction select.

Si vous souhaitez simplement conserver l'ordre dans lequel les données ont été saisies, un horodatage simple suffit.

+0

Voulez-vous dire que je peux appeler une nouvelle commande dans la colonne? Comme renuméroter? – MP123

+0

Peut-être ai-je besoin d'une colonne qui ne change jamais? Lorsque vous supprimez des lignes, quittez cette colonne. – MP123

0

Pour cette raison, il est le "ORDER BY" command dans les requêtes:

SELECT * FROM 'TABLE' WHERE 'TABLE.FIELD' = 'XY' ORDER BY 'TABLE.FIELD'; 
+0

Oui, c'est comme ça que j'obtiens les données. Mais qu'en est-il de UPDATE, INSERT et DELETE. Lors de la préformation de ces commandes, la colonne d'affichage va nécessiter un ajustement. J'utiliserais également cette colonne pour référencer le placement désiré des données. Mais s'il y a des lacunes, cela pourrait causer des problèmes avec des lignes qui n'existent pas. – MP123

+0

Eh bien, il n'y a pas une telle chose dans MYSQL (parce qu'il n'y a pas d'ordre spécifié par lequel les résultats trouvés doivent être affichés). Bien sûr, vous pouvez utiliser une colonne pour l'affichage et la commande par cette colonne, mais ceci est plus ou moins coûteux. Vous pouvez le faire, mais quand vous faites UPDATE, INSERT et DELETE vous devrez mettre à jour la colonne d'affichage de toutes les autres entrées. – Thariama

+0

Eh bien, je pensais, et si j'avais une colonne d'affichage qui n'a jamais changé. Si je supprime une ligne de données, quittez cette colonne et déplacez tout simplement. Si j'insère, déplacez tout et insérez à cet endroit. Je suppose que je pourrais utiliser la colonne AUTO_INCREMENT pour cela ... – MP123

Questions connexes