Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用特定的顺序进行更新_Php_Mysql - Fatal编程技术网

Php 如何使用特定的顺序进行更新

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

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

$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的解决方案这是我的问题。我不知道该怎么做