0

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}]

私はこれを考えすぎていますか?もっと簡単な解決策はありますか?

4

0 に答える 0