在insert ... select语句mysql中插入增量值

时间:2012-04-10 00:29:55

标签: php mysql

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

+-------+--------+-------+
| 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中提供更优雅的解决方案

2 个答案:

答案 0 :(得分: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   |
   +--------+------------+

答案 1 :(得分:0)

试试这个

    INSERT INTO myTable(`porder`, x, y) SELECT (SELECT MAX(`porder`) FROM myTable) - `porder`, x, y FROM myTable