Php 如何使用特定的顺序进行更新
我在MySql数据库中有不同的项。用户可以创建和删除项目。用户也可以决定这些项目的顺序。我找到了一种方法来获取de user决定的顺序并将其存储在var中:Php 如何使用特定的顺序进行更新,php,mysql,Php,Mysql,我在MySql数据库中有不同的项。用户可以创建和删除项目。用户也可以决定这些项目的顺序。我找到了一种方法来获取de user决定的顺序并将其存储在var中: $order = $_GET['order']; 如果我重复这个,它会给我这样的东西:2,1,3 这意味着用户希望id为2的项位于第一位,id为1的项位于第二位,而id为3的项位于第三位 如何更新数据库以保存用户决定的顺序 mysqli_query($con,"UPDATE MyTable SE
$order = $_GET['order'];
如果我重复这个,它会给我这样的东西:2,1,3
这意味着用户希望id为2的项位于第一位,id为1的项位于第二位,而id为3的项位于第三位
如何更新数据库以保存用户决定的顺序
mysqli_query($con,"UPDATE MyTable
SET id=
WHERE ");
(我当然不知道我有多少个项目,这是随着用户的决定而动态变化的。这只是一个简化的示例)如果您需要每个
用户
能够在数据库中保存某些项目
的顺序,那么我建议使用一个透视表user\u项目
,该透视表存储用户的id
他们为项目
和项目
id选择的位置
这样,您就可以在用户项目上选择,使用加入项目和按用户项目排序。为特定用户的id
定位
如果只有一个用户,则可以将位置
列直接存储在项
表中。使用变量的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。如果没有这个技巧,未指定的对象将设置顺序字段,以便首先列出它们
当每行按顺序更新时,order fields值被设置为计数器变量,其值同时递增
不利的一面是,这严格来说是两条语句,因为变量需要初始化。初始化变量的常规技巧是使用子查询,但这将导致对更新查询使用多表语法,在这种情况下不支持ORDER BY和LIMIt子句。ORDER
如排列中所示,或ORDER
如名为“ORDER”的列中所示?就数据库而言,您不能在后端重新排列项目,但您可以在选择时对其进行排序。我认为不可能创建这样的任意排序列表。不是直接的SQL代码。美洲驼:作为一种安排。我的意思是,我能把id 2改成1吗,把id 1改成2吗?你可以在数据库中记录客户希望你记录的任何信息“项目”的显示顺序只是需要存储在数据库中的数据,并且在用户希望查看数据库中显示的信息时使用。它与您必须处理的任何其他数据项没有什么不同。好吧,但问题是我如何在任何表中保存id为2的项的顺序为1,id为2的项的顺序为1…@Nrc,或者在数组中循环并运行几个更新或使用类似于Kickstart的解决方案这是我的问题。我不知道该怎么做