2017-10-12 3 views
0

私はテーブルの行をソートするためにjQueryのソート可能性を使用しています。新しい注文はバックエンドに保存され、私はPython Djangoを使用しています。データベースに列がありますpriority.データを上書きしないMySQLの複数の更新

これはバックエンドのロジックを処理する方法です。上記

previous_order = [ 1,2,3,4,5 ] 
new_order = [3,4,5,1,2] 

orders_to_rearrange = [     ### gets passed in a function 
    [1,3], [2,4], [3,5], [4,1], [5,2] 
] 

### UPPDATE the following: 
### Priority 1 to become 3 
### Priority 2 to become 4 
### Priority 3 to become 5 
### Priority 4 to become 1 
### Priority 5 to become 1 

私はこのような複雑なスイッチが発生した際に、かなりの例ですが、:最後の配列は基本的に、私は以下のことが起こるしたい2Dリストである

### Priority 5 to become 2 
### Priority 2 to become 4 
### Priority 4 to become 1 

お知らせどのようにした後5が2になると、4は2になり、前の5も同じになります。これで、ループ内のステートメントを上書きするため、2つの優先順位2が得られます。

私はMySQLのWHEN THEN caseステートメントが役に立ちますが、ループするのと同じことをやります。

UPDATE my_table 
    SET priority = 
     CASE priority 
     %s 
     ELSE priority 
END 

注:私の2D配列をWHEN __ THEN __ステートメントに変換し、その%sパターンを置き換える関数があります。

誰も私に、1つのステートメントで同時にデータを上書きすることなく、行を更新する方法に関するアドバイスをいただけますか?

ありがとうございました!!!

+0

ない100%必ずデータを上書きせずに行を更新することによって、何を意味するかが、ケース・ステートメントを使って正しい方向に進んでいたかもしれないと思います...少なくとも、私が問題を理解している限りは。 '更新MY_TABLE セット優先=ケース場合、優先度= 1、次いで\t \t \t \t \t \t \t優先順位= 2、次いで4 \t \t \t \t \t \t \t \t \t \t \t優先順位= 3、次いで5 3 \t \t \t \t \t \t \t \t \t \t \t \t \t \t優先度= 4、次に1 \t \t \t \t \t \t \t \t \t \t \t優先度= 5、次に1つの他優先端優先> 0 ; '。 – JuveLeo1906

+0

こんにちは@ JuveLeo1906これは、行ごとに、または同時にすべて実行されますか?なんらかの理由で、私のページをリフレッシュすると、その注文はそれに応じて保存されません。私は私のUPDATEステートメントのどこが壊れているのかわかりません。 – Marvin

+0

これは1つのステートメントなので、すべて同時に更新されます。ページを更新する前にコミット・ステートメントが欠落している可能性がありますか? – JuveLeo1906

答えて

1

が、私はそれだけで私が問題を正しく理解していなかった場合を除き... case文を固定の問題かもしれないと思う:

update my_table 
    set priority = case when priority = 1 then 3 
         when priority = 2 then 4 
         when priority = 3 then 5 
         when priority = 4 then 1 
         when priority = 5 then 1 
         else priority end 
where priority > 0; 
関連する問題