2013-07-07 47 views
0

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

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

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

有没有更好的方法来做到这一点?

+0

也许用户排序​​表应该有充分的PROJECT_ID对单独的行秩,一个查询可以处理他们 –

回答

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"; 
+0

呀,你的权利,这是一个更好的办法我想想,尽管在我的方法中只有1个字段被更新;不会更新49个领域更多的工作? 嗯,我想用体面的钥匙,它会足够快,thx! – user215867