拖放保存到 mysql 优化
Posted
技术标签:
【中文标题】拖放保存到 mysql 优化【英文标题】:drag & drop saving to mysql optimalized 【发布时间】:2013-07-07 18:35:30 【问题描述】:这里有一些类似的问题,但我已经实现了我的方式;认为这与预期的“好”相去甚远;问题是我有一个列表,您可以拖放,但如果将 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);最不干净而且很慢。
有没有更好的方法来做到这一点?
【问题讨论】:
也许用户排序表应该将每个 project_id 的排名放在单独的行上,一个查询可以处理它们 【参考方案1】:如果将 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";
【讨论】:
是的,你说得对,我认为这是一种更好的方法,尽管在我的方法中只更新了 1 个字段;更新 49 个字段不是更多的工作吗?好吧,我想用像样的键,它会足够快,谢谢!以上是关于拖放保存到 mysql 优化的主要内容,如果未能解决你的问题,请参考以下文章