如何使用特定订单进行更新

时间:2014-07-17 14:09:19

标签: php mysql

我在MySql数据库中有不同的项目。用户可以创建和删除项目。用户也可以决定该项目的顺序。我找到了一种方法来获取de用户决定的顺序并将其存储在var:

$order = $_GET['order'];

如果我回应这个,它将给我举例如下:2,1,3 这意味着用户希望id为2的项目位于第一位,id为1的项目位于第二位,项目3位于第三位......

如何更新数据库以保存用户决定的订单?

mysqli_query($con,"UPDATE MyTable   
                   SET id=  
                   WHERE  ");  

(我当然不知道我有多少项,这是随着用户决定动态变化的东西。这只是一个简化的例子)

2 个答案:

答案 0 :(得分:0)

如果您需要每个user能够保存数据库中某些item的订单,那么我建议存储user_item'的数据透视表user id position他们为itemitem id选择了SELECT ..

通过这种方式user_item JOIN item ORDER BY user_item.positionuser id position }}

如果您只有一个用户,则可以将item列直接存储在{{1}}表中。

答案 1 :(得分:0)

使用变量的可能SQL解决方案。

SET @cnt:=0;
UPDATE order_table
SET order_field = @cnt:=@cnt+1
ORDER BY FIELD(id, 1, 3, 2) DESC;

将变量初始化为0.使用FIELD函数对更新进行排序。这将返回以下值中id值的位置。我把这些值放在你想要它们的相反顺序并使用DESC;这是为了绕过一个小问题,即如果id的值不是指定值之一,则返回0。没有这个技巧,未指定的那些将设置订单字段,使它们首先列出。

每一行都按顺序更新,顺序字段值设置为计数器变量,其值同时递增。

缺点是这是严格的2个语句,因为变量需要初始化。初始化变量的常规技巧是使用子查询,但这会导致为更新查询使用多个表语法,在这种情况下,不支持ORDER BY和LIMIt子句。