这里有一些类似的问题,但我已经实现了我的方式;认为这远远不是预期的“好”;问题是我有一个列表,你可以拖放虽然如果一个元素从一个位置拖动到另一个位置50,那么49个元素需要更新(这将是49个查询)只是为了保存1个动作;现在不要这样做,我保存了一个列表并将列表保存到mysql;
+---------+------------+-----------+
| user_id | project_id | user_sort |
+---------+------------+-----------+
| 1 | 2 | 3,1,2 |
+---------+------------+-----------+
这有优点,我只需要更新1行;然而问题是当用户返回时,我需要做2个查询(选择user_sort,并选择所有id);并在其间使用PHP来爆炸(user_sort);最不洁净,最慢的。
有更好的方法吗?
答案 0 :(得分:0)
如果一个元素从一个位置拖动到位置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";