我在MySql数据库中有不同的项目。用户可以创建和删除项目。用户也可以决定该项目的顺序。我找到了一种方法来获取de用户决定的顺序并将其存储在var:
中$order = $_GET['order'];
如果我回应这个,它将给我举例如下:2,1,3 这意味着用户希望id为2的项目位于第一位,id为1的项目位于第二位,项目3位于第三位......
如何更新数据库以保存用户决定的订单?
mysqli_query($con,"UPDATE MyTable
SET id=
WHERE ");
(我当然不知道我有多少项,这是随着用户决定动态变化的东西。这只是一个简化的例子)
答案 0 :(得分:0)
如果您需要每个user
能够保存数据库中某些item
的订单,那么我建议存储user_item
'的数据透视表user
id
position
他们为item
和item
id
选择了SELECT
..
通过这种方式user_item
JOIN
item
ORDER BY user_item.position
和user
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子句。