1

我正在尝试选择表中的多行,反转一列中的值并将它们重新插入表中。这是我正在做的一个例子,假设我有以下数据:

+-------+--------+-------+
| ORDER |   X    |   Y   |
+-------+--------+-------+
|  0    |   12   |   5   |
|  1    |   16   |   3   |
|  2    |   19   |   2   |
+-------+--------+-------+

我想选择它并将其重新插入到同一个表中,并将 ORDER 反转为:

+--------+--------+-------+
| PORDER |   X    |   Y   |
+--------+--------+-------+
|  2     |   12   |   5   |
|  1     |   16   |   3   |
|  0     |   19   |   2   |
+--------+--------+-------+

我能够复制行并重新插入它们,使用插入没问题...选择这样的:

INSERT INTO myTable (porder, x, y) SELECT porder, x, y FROM myTable 

但我没有成功扭转订单。我试过了

INSERT INTO myTable (porder, x, y) SELECT (SELECT porder FROM myTable ORDER BY porder DESC), x, y FROM myTable but that throws an error

可以简单地忽略 porder 列并插入从 0 到序列中最高数字的新值(在我上面的示例中为 2),但我不知道如何在 mysql 的多行插入语句中添加序列号.

我知道如何用 php 做到这一点,但我认为必须有一个更优雅的解决方案,只用 SQL

4

2 回答 2

1

如果你知道 的最大值order,你可以简单地做(假设max(order) = 2

UPDATE `myTable` SET `PORDER` = 2 - `PORDER`

例子:

   +--------+------------+
   | PORDER | 2 - PORDER |
   +--------+------------+
   |  0     |  2-0 = 2   |
   |  1     |  2-1 = 1   |
   |  2     |  2-2 = 0   |
   +--------+------------+
于 2012-04-10T00:37:56.903 回答
0

试试这个

    INSERT INTO myTable(`porder`, x, y) SELECT (SELECT MAX(`porder`) FROM myTable) - `porder`, x, y FROM myTable
于 2012-04-10T06:03:15.830 回答