2017-10-10 9 views
0

Si je veux concevoir une table comme un livre, un livre ont tant de chapitres, les chapitres peuvent ordre par autre domaine comme created_timeComment concevoir un champ d'index qui insérables et reorderable

id | chapter_name 
1 | aa 
2 | cc 
3 | dd 

je peux commander ces sorties d'enregistrement comme:

aa, cc, dd

Dans l'état du livre ont trop chapitres, si l'auteur veut insérer un chapitre entre des chapitres existez

Il y a deux embrouille dans cette condition:

  1. Comment concevoir ce que je peux insérer un enregistrement bb sortie comme:

aa, bb, cc, dd

  1. Comment concevoir i t si je peux modifier l'ordre dd sortie comme:

aa, dd, cc

Merci beaucoup, si je pensais était mal au début, s'il vous plaît signaler

+0

Pouvez-vous nous montrer votre sortie désirée? En passant, il n'y a généralement pas d'ordre dans une table MySQL. Le seul ordre qui existe se produit lorsque vous l'interrogez en utilisant 'ORDER BY'. –

+0

si vous n 'ajustez pas "order_id" comment cela peut être entre 'aa' et' cc'? Voulez-vous changer le 'id' de cette table? Si ceux-ci n'ont pas besoin, vous pouvez simplement utiliser 'order by' sur' name' –

+0

@TimBiegeleisen Merci, j'ai ajouté la sortie désir, oui! Je veux commander ces données par un autre champ, comme 'order_id' ou quelque chose comme ça. – Kcat

Répondre

0

Vous » d doivent changer votre order_id à une valeur en virgule flottante, de sorte que vous pouvez insérer/mettre à jour à-dire 1,5. Ou vous aurez besoin d'utiliser un plus grand espace de nombre comme 1000, 2000, 3000, de sorte que vous pouvez mettre les entrées entre par exemple 1500.

Si vous voulez vous integer pouvez utiliser la numérotation de votre commande par colonne pour générer la commande dynamique avec row_number etc, par exemple

SELECT chapter_name, row_number() OVER (ORDER BY order_id) FROM my_table; 

Sinon, vous pourriez être confus au sujet de la façon dont les tables de base de données de travail et attend de maintenir une commande sans clause ORDER BY? Parce qu'ils ne fonctionnent pas comme ça. La base de données peut renvoyer les lignes dans l'ordre qu'il se sent comme à moins que vous fournissiez un ORDER BY.

+0

Merci beaucoup, je pensais que c'est la même chose que vous avant, comme la conception d'un livre, livre ont tant de chapitres, mais si l'auteur veut insérer un chapitre, c'est le problème – Kcat

+0

Alors, que pensez-vous maintenant? Je ne comprends toujours pas vraiment ta question, tout le monde essaye de deviner ce que tu veux vraiment dire. –

+0

Désolé, je pense que ma description n'est pas claire, je veux juste savoir comment concevoir cette table dans le cas des chapitres de livre, «order_id» ou «created_time» est la solution pour indexer en temps de création, mais comment ajuster l'index de ces enregistrements à l'avenir? – Kcat

0

Si vous voulez juste coder en dur les valeurs

Pour la première requête

Mise à jour nom_table Set id = 4 et order_id = 4 WHERE name = 'dd';

Mise à jour nom_table Définir id = 3 et order_id = 3 WHERE name = 'cc';

Insérer dans les valeurs (id, name, order_id) (2, 'bb', 2);

Pour la deuxième requête

Mise à jour nom_table Set id = 2 et order_id = 2 OU name = 'dd';

(deuxième requête est quand leur sont pas d'enregistrement bb nom) après juste commande par order_id