2017-09-28 6 views
-1

JavaScript、PHP、mysqlがうまく機能しているドラッグ&ドロップ注文リストを作成することができました。これは、リストに表示される異なるカテゴリを複数選択できるカテゴリシステムと統合されます。このため、私はすべてのカテゴリに渡ってエントリのリストを逐次保存しています。間違った注文リストを再構築する

何らかの点で何かがうまくいかず、順序付きリストが同期しなくなった場合、それを再構築して数字の値を連続した番号付きの順序付きリストに戻す方法があります。例:1 - > 1000000000。

私の考えは、重複したレコードやレコードがないことです。これらのエラーの1つが見つかった場合。このエラーよりも各エントリを高くし、順序付きリストを再構築します。

例えば: 壊れた順序リストである:1、2、4、5、6、7、8、9、10
ようにリストを再構築する:1、2、3、4、5、6 、7、8、9

または:1、2、3、4、4、5、6、7、8、9
:1、2、3、4、5、6、7、8 、9、10

これは、順序付きインデックスが正しく機能するようにします。このクエリは、途中で見つかった他のエラーも修正します。

これは私がまだ理解していないmysqlに入っています。私はこれがおそらくそうだと思いますが、正しい方向に進むためには何か助けが必要です。どうもありがとう。 DEMO:

作業

答えて

1

は、お使いのベーステーブルに行番号(RN)を確立し、その後、RNは、ソート順を更新することに使用するユーザー変数を使用します。

このSortOrderが何らかのグループ分けである場合でも、RNのリセットを制御するために2番目(またはそれ以上)のユーザー変数を使用して、行番号がそのグループによって分割されるようにする必要があります。例:各ユーザがソート順を持っている場合は、各ユーザの行番号をリセットし、新しいユーザ変数、case文を追加して行番号のリセットを処理し、ユーザがサブクエリを順序付けする必要があります。

ただし、グループのない単一のリストの場合は、以下のように動作します。

重複する値があるときに行が表示される順序を定義できるように、サブクエリで2次の順序を持​​つことをお勧めします(この場合IDは正常に動作します)。ただし、気にしない場合は、未定義のソート順で発生する可能性があります。私たちを与える

CREATE TABLE SO46469439_Foo (
    ID int, 
    Sortorder int); 

INSERT INTO SO46469439_Foo (ID, Sortorder) VALUES (1,1),(2,2),(3,2),(4,4),(5,9); 

#Return dataset showing improper SortOrder 
SELECT * FROM SO46469439_Foo Order by SortOrder; 

#Update dataset to have proper SortOrder no gaps no duplicates. 
UPDATE SO46469439_Foo SRC 
#This inner join is so that we get a row_number for each SortOrder 
#that row number is then used to update sortOrder 
INNER JOIN (SELECT A.*, @RN:[email protected]+1 RN 
      FROM SO46469439_Foo A 
#Cross join to initialize user variable which we use for row number 
#in DBs which support analytical functiosn we would just use Row_number() 
# over (partition by Groups order by Groups, sortOrder) to get a RN 
      CROSS JOIN (SELECT @RN:=0) Z 
      ORDER BY SortOrder) UP 
ON SRC.ID = UP.ID 
SET SRC.SortOrder = UP.RN; 

#show updated results 
SELECT * FROM SO46469439_Foo order by SortOrder 

improper SortOrder 
+----+----+-----------+ 
| | ID | SortOrder | 
+----+----+-----------+ 
| 1 | 1 | 1   | 
| 2 | 2 | 2   | 
| 3 | 3 | 2   | 
| 4 | 4 | 4   | 
| 5 | 5 | 9   | 
+----+----+-----------+ 

Proper SortOrder. Note:The duplicated 2 is gone and the 9 has been brought in. 
+----+----+-----------+ 
| | ID | SortOrder | 
| 1 | 1 | 1   | 
| 2 | 2 | 2   | 
| 3 | 3 | 3   | 
| 4 | 4 | 4   | 
| 5 | 5 | 5   | 
+----+----+-----------+ 
+0

は私にこの指針を与えていただき、ありがとうございます。私が見ているところで私が消化するためのかなり多くの。 – fullmoonfriday

+0

ヘルプの理解が必要な場合は質問してください。私はむしろあなたに釣った答えを提供するよりも魚を学ぶように、より完全な答えを開発したいと思います。 – xQbert

+0

ありがとう、私はあなたに戻ってくる必要があります。 – fullmoonfriday

関連する問題