jQuery DataTables Row Reordering プラグインを使用して、ページ上のクイズのリストを並べ替えています。AJAX 応答を処理し、変更をデータベース (私の場合は MySQL) に保持する最良の方法は何ですか?
現在、データベースからクイズのリストを取得し、それらを並べ替えを行う関数に渡し、結果をループしてクイズをデータベースに保存します。テストケースと出力の例を含む私の並べ替え関数は次のとおりです。
<?php
/**
* Reorders a list of quizzes.
* Assumes that the input list of quizzes is in sorted
* order and looks like this:
*
* $quizzes = array(array('id'=>27, 'sort_order'=>1), ...);quiz_id:{$quiz['id']} from: $from to: $to dir: $dir\n";
if($counter === $to) {
$next = $quiz;
} else if(count($quizzes) === $from) {
array_pop($quizzes); // discard
continue;
} else {
$next = array_pop($quizzes);
}
$next['sort_changed'] = ($next['sort_order'] !== $counter);
$next['sort_diff'] = $counter - $next['sort_order'];
$next['sort_order'] = $counter;
$reordered[] = $next;
$counter--;
}
return array_reverse($reordered);
}
?>
例:
<?php
$quizzes = array(
array('id' => 1, 'sort_order' => 1),
array('id' => 2, 'sort_order' => 2),
array('id' => 3, 'sort_order' => 3),
array('id' => 4, 'sort_order' => 4),
array('id' => 5, 'sort_order' => 5)
);
$from = 4;
$quiz = $quizzes[$from-1];
$to = 1;
$result = reorder($quizzes, count($quizzes), $quiz, $from, $to, 'back');
print json_encode($result);
?>
次のような出力で:
[{"id":4,"sort_order":1,"sort_changed":true,"sort_diff":-3},
{"id":1,"sort_order":2,"sort_changed":true,"sort_diff":1},
{"id":2,"sort_order":3,"sort_changed":true,"sort_diff":1},
{"id":3,"sort_order":4,"sort_changed":true,"sort_diff":1},
{"id":5,"sort_order":5,"sort_changed":false,"sort_diff":0}]
私はこれを考えすぎていますか?もっと簡単な解決策はありますか?