我正在尝试在表中选择多个行,反转一列中的值并将它们重新插入表中。这是我正在做的一个例子,说我有以下数据:
+-------+--------+-------+
| 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中提供更优雅的解决方案
答案 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