2017-03-17 11 views
1

みんな!私は単純なトドゥーのアプリを作っている。私は1つの問題に立ち止まった。私は、ユーザーがリスト内の要素の順序を変更できるようにしたい(これをデータベースに保存する)。テーブル内のアイテムの順序を保つ

最初のアイデアの一つは:

は、カラム()を作成し、それをユーザーが何かをするたびに変更します。 いくつかのレコードがある場合はいいですが、数字が大きいほど何ですか? 私の思考:最初の位置へのユーザの変更「悲しみ」

id | name | order 
1 | lorem| 1 
2 | ipsum| 2 
3 | dolor| 3 

、スクリプトがすべてのレコードを更新する必要があります。 これは私が考える最高の解決策ではありません。 誰もがそれを最適化する方法の知識を共有できますか? 私は感謝します!

+1

[データベーステーブルの並べ替え順序の列を使用する](http://stackoverflow.com/questions/8607998/using-a-sort-order-column-in-a-database-table) – SqlZim

+0

可能な重複[データベーステーブルの並べ替え順序の列を使用する](http://stackoverflow.com/questions/8607998/using-a-sort-order-column-in-a-database-table) – philipxy

答えて

0

nextまたはpreviousという名前の列を使用できます。これは、リンクされたリストと呼ばれ、または両方を使用する場合は、ダブルリンクされたリストです。参照:

https://en.wikipedia.org/wiki/Doubly_linked_list

2つのステップを伴うだろう、データベーステーブル内の1つのステップアップのレコードを移動:

  1. は順序からレコードを削除します。
  2. レコードを注文書に挿入し直します。

すべての場合、ダブルリンクリストには約5回のレコード変更が必要で、リンクリストには最低3回のレコードが必要です。

+0

これはSQL ' ish溶液です。 –

0

このデータをデータベースに保存する場合は、「注文」列が適切です。

テーブルに更新または挿入するたびに、この列を更新する必要があります(削除は不要です)。一般に、変更された行の後にあるすべての行を更新する必要があります。トリガーはこの作業を行うことができます。

行数の循環は、データベースがどれほど強力かによっては、数十から数百行でも問題ありません。したがって、リストの長さによっては、これはうまくいく可能性があります。

拡張機能は、その他の要素によって異なります。私が考えることのできるもの:

  • リストはどれくらいの大きさですか?
  • どのような種類の変換が最も多く導入されていますか? (スワップ?挿入?削除の更新?)
  • 変換は一括して行われますか?
  • 複数のユーザーが同時にリストを変更しますか。
関連する問題