0

这里有一些类似的问题,但我已经实现了我的方式;认为这与预期的“好”相去甚远;问题是我有一个列表,您可以拖放,但如果将 1 个元素从位置拖动到位置 50,则需要更新 49 个元素(这将是 49 个查询)只是为了保存 1 个操作;现在不这样做,我保存了一个列表并将列表保存到mysql;

+---------+------------+-----------+
| user_id | project_id | user_sort |
+---------+------------+-----------+
|       1 |          2 | 3,1,2     |
+---------+------------+-----------+

这样做的好处是,我只需要更新 1 行;然而问题是当用户返回时,我需要做 2 个查询(选择 user_sort,并选择所有 id);并在两者之间使用 PHP 来爆炸(user_sort);最不干净而且很慢。

有一个更好的方法吗 ?

4

1 回答 1

0

如果将 1 个元素从位置拖动到位置 50,则需要更新 49 个元素(这将是 49 个查询)只是为了保存 1 个操作

这不是真的,您可以在 2 个查询中更新所有 49 行:

$id = 10; // moved element
$old_pos = 1;
$new_pos = 50;

// elements between old and new position
if ($new_pos > $old_pos) {
    $sql1 = "
        UPDATE my_table 
           SET user_sort=user_sort-1 
         WHERE user_sort > $old_pos 
           AND user_sort <= $new_pos";
} else {
    $sql1 = "
        UPDATE my_table 
           SET user_sort=user_sort+1 
         WHERE user_sort >= $old_pos 
           AND user_sort < $new_pos";
}
// moved element
$sql2 = "UPDATE my_table SET user_sort=$new_pos WHERE id=$id";
于 2013-07-07T19:48:55.853 回答