どのように私は彼らの注文がいつでも再配置できるように、私のデータベーステーブルを構築することができますか?

Panpaper:

私はそれが別のデバイス上で、後に再びアクセスすることができるので、基本的にデータベースにリッチテキストエディタからの出力を保存個人的なプロジェクトに取り組んでいます。ユーザーが別の章または対象のためのノートに「ページ」を追加することができます。

私はに走った問題は、私はノートの順序を変更したり、新しいページのどこかを挿入することができないんだということです。私の現在のソリューションは、2つのIDを持つことである - 一つはプライマリインデックス(ID)であり、他方は、相対ID(RID)です。それらを表示するときに、行を並べ替えるには、私はちょうどRIDによってソート行、その後、その行のRIDを変更します。

ID | RID | page_title | page_content
01 | 01  | Hello      | Hello world
02 | 02  | Goodbye    | See ya

この作品は、私は非常にいくつかのページを持っているとき、私は100ページを持っていたと私は並べ替えたり途中で新しい行を挿入したい場合、私は変更が行われたところ、以下の行ごとにRIDを変更する必要があると思います。

それは再配置以降に挿入するのは簡単だなというのが私のテーブルを構築するための適切な方法は何ですか?私は、MySQLがSQLAlchemyのを使用してphpMyAdminに、とSQLiteのを使用して精通です。

これは前に頼まれている場合申し訳ありませんが、それはGoogle検索への質問は、私は無関係な結果を取得保管フレーズに難しいです。前もって感謝します!

クリス・ジョンソン:

これを行うには多くの方法があります。一つの簡単な方法は、リンクリストとしてページを扱うことであろう。代わりオーダーカラムの使用prior(FK)、これらのページの前のページを指していることをカラム。

ABCD順でページから始まる例:

id, page name, prior
1, a, null
2, b, 1
3, c, 2
4, d, 3
5, e, 4

、あなたが希望ページ「D」の後にページ「B」を移動するには:

前1の(1)変更のCさん

(2)変更Bの前に4

前2〜(3)の変化Eさん

トランザクション内で、あなたは黄金だということをすべて行います。新しいリストは次のようになります。

id, page name, prior
1, a, null
2, b, 4
3, c, 1
4, d, 3
5, e, 2

操作の同じ数(単独リンクリストのための3)は、あなたが持っているどのように多くの総ページ数に関係なく必要とされるであろう。

それは特別なケースだから、最初のページ(前= null)を移動するための実装をテストしてください。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=294208&siteId=1