これは MySQL に関する質問です。
次の構造のテーブルがあります。
reference
position
parent
すべてのアイテムには位置があり、各位置は 1 回だけ使用する必要があります。位置はインクリメントする必要があります (したがって、40 個のアイテムがある場合、位置は 1 から 40 まで移動する必要があります)。
ただし、このテーブルのデータはいたるところにあります (同じ位置が複数回使用されており、位置のない行もあります)。位置を再インデックスしてテーブルをリセットしたいと思います。これを行うときは、既存の注文を (完全でなくても) 尊重したいと思います (可能であれば - そうでない場合は、ポジションを破棄できます)。
------------------------------------------------------
| reference | position | parent |
|-----------------|--------------------|--------------|
|ASHDFNS |2 |89 |
|BSHDFNS |2 |89 |
|CSHDFNS |1 |89 |
|DSHDFNS |100 |89 |
|ESHDFNS |8 |89 |
|FSHDFNS |22 |89 |
|ASHDFNS |1 |11 |
|BSHDFNS |22 |11 |
|CSHDFNS |333 |11 |
|-----------------|--------------------|--------------|
望ましい
-------------------------------------------------------
| reference | position | parent |
|-----------------|--------------------|--------------|
|CSHDFNS |1 |89 |
|ASHDFNS |2 |89 |
|BSHDFNS |3 |89 |
|ESHDFNS |4 |89 |
|FSHDFNS |5 |89 |
|DSHDFNS |6 |89 |
|ASHDFNS |1 |11 |
|BSHDFNS |2 |11 |
|CSHDFNS |3 |11 |
|-----------------|--------------------|--------------|
編集:申し訳ありませんが、テーブルが複数の親内のアイテムの位置を説明しているため、位置列を自動インクリメントするだけでは機能しません (アイテムは複数の親を持つことができます)。