使用组和顺序更新MySQL

使用组和顺序更新MySQL,mysql,sql,Mysql,Sql,我试图对一个表进行更新,这样它就可以根据另一个表的顺序增加一列上的值。 事情是这样的 ID GROUP_ID ORDER(Desired) ORDER(NOW) 1 1 1 2 2 1 2 3 3 1 3 1 4 2 1

我试图对一个表进行更新,这样它就可以根据另一个表的顺序增加一列上的值。 事情是这样的

 ID    GROUP_ID    ORDER(Desired)   ORDER(NOW)
 1        1             1              2
 2        1             2              3
 3        1             3              1
 4        2             1              2
 5        2             2              1
 6        3             1              1
 7        3             2              1
 8        3             3              2
因此,我需要为每个ID更新ORDER列,以便它可以在每个GROUP_ID内从1开始连续

我已经找到了一些关于更新和订单的类似问题的解决方案,但是没有一个解决方案在同一个表中对组使用多个订单

希望我正确地说明了这个问题。提前感谢

您可以通过重新“排列”行来完成。Mysql不支持窗口功能,但使用join和count可以获得相同的结果,如下所示:

UPDATE YourTable t
INNER JOIN(SELECT s.id,s.group_id,count(*) as cnt
           FROM YourTable s
           INNER JOIN YourTable ss 
            ON(s.group_id = ss.group_id and s.id >= ss.id)
           GROUP BY s.id,s.group_id) tt
 ON (t.id = tt.id and t.group_id = tt.group_id)
SET t.order = tt.cnt
您可以通过重新“排列”行来完成此操作。Mysql不支持窗口功能,但使用join和count可以获得相同的结果,如下所示:

UPDATE YourTable t
INNER JOIN(SELECT s.id,s.group_id,count(*) as cnt
           FROM YourTable s
           INNER JOIN YourTable ss 
            ON(s.group_id = ss.group_id and s.id >= ss.id)
           GROUP BY s.id,s.group_id) tt
 ON (t.id = tt.id and t.group_id = tt.group_id)
SET t.order = tt.cnt

存储这样的东西真的没有意义。事实上,它不完全是一个订单,我这样说是为了说明,它们实际上是账单,信用卡要求我计算特定服务的账单月数。它仍然是派生数据。存储它仍然没有意义。您如何确定订单?它是由
ID
提供的吗?(这可能是个错误,因为您可能希望按日期/时间订购,
ID
不相同,即使它是自动递增的)。无论您如何对数据排序,都可以在运行时计算该顺序。将其存储在数据库中只会创建计算数据,这些数据最终将失去同步,并导致比您认为解决的问题更多的问题。
插入订单(订单日期)值('2016-03-10')插入订单(订单日期)值('2016-03-08')
这只是使用自动递增ID作为代理日期/时间值可能导致问题的许多方法之一。存储这样的东西真的没有意义。实际上,它不完全是一个订单,我这样说是为了说明,它们实际上是账单,而信用卡要求我计算特定服务(它仍然是派生数据)中每月的账单数量。存储它仍然没有意义。您如何确定订单?它是由
ID
提供的吗?(这可能是个错误,因为您可能希望按日期/时间订购,
ID
不相同,即使它是自动递增的)。无论您如何对数据排序,都可以在运行时计算该顺序。将其存储在数据库中只会创建计算数据,这些数据最终将失去同步,并导致比您认为解决的问题更多的问题。
插入订单(订单日期)值('2016-03-10')插入订单(订单日期)值('2016-03-08')
这只是使用自动递增ID作为代理日期/时间值可能导致问题的众多方式之一。谢谢你,sagi,这很有魅力,但我正在努力了解它的来源。你能试着解释一下吗?谢谢你,萨吉,这很有魅力,但我想知道它是从哪里来的。你能试着解释一下吗?