2012-04-10 26 views
1

テーブル内のいくつかの行を選択しようとしていますが、1つの列の値を逆にしてテーブルに挿入し直しています。挿入のインクリメンタル値を挿入するselectステートメントmysql

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

:私はそれを選択し、なるように逆の順序で同じテーブルにそれを再挿入したい

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

:ここで私がやっているものの例があり、私は次のようなデータを持っていると言います私はこのような行を複製し、インサートを使用して、何の問題を再挿入...選択することができる午前:

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

が、私は順序を逆に何も成功していませんでした。私は、単にPORDER列を無視して、0から順に最も多く(私の上記の例では2)に新しい値を挿入するにはいいと思い

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

を試してみましたが、私はシーケンシャルを追加する方法がわかりませんmysqlの複数行のinsert文の数字。

max(order) = 2を想定して)私はPHPでこれを行う方法を知っているが、私はあなたがorderの最大値を知っていれば、あなたは、単に行うことができますちょうどSQL

+0

エラーメッセージは何ですか?一時テーブルの使用について考えましたか? 'CREATE TABLE TMP ...'。 'INSERT INTO TMP SELECT ... myTable'です。 'DROP TABLE myTable'。 'RENAME TABLE TMP to myTable'。 – Basti

答えて

0

この

を試してみてください
INSERT INTO myTable(`porder`, x, y) SELECT (SELECT MAX(`porder`) FROM myTable) - `porder`, x, y FROM myTable 
+0

SELECT MAXでは、残念ながら各点のセットから1行しか選択されません。奇妙なことに、それは0の小数点でその行を返しました、私は2(porder max 2 - 0の小計= 2)と予想していましたが、約束したように思われるので、これ以上いくつか演奏します。 – MatthewLee

+0

あなたの答えと@ Bastiの両方が2つを組み合わせることが正しい軌道に乗ってくれたので投票しました。私は最大のporderを引っ張ってそれを変数に割り当てるために2番目のクエリを持っていなければなりませんでした。誰かがより洗練されたソリューションを持っているなら、私はそれを見ていただければ幸いです。 – MatthewLee

1

に、よりエレガントな解決策が存在しなければならないことを考えていた

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

例:

+--------+------------+ 
    | PORDER | 2 - PORDER | 
    +--------+------------+ 
    | 0  | 2-0 = 2 | 
    | 1  | 2-1 = 1 | 
    | 2  | 2-2 = 0 | 
    +--------+------------+ 
+0

残念ながら、私は最大値を知らないので、大文字と小文字が変わりますが、ありがとうございます。 – MatthewLee

+0

それから、更新を行う直前にそれを問い合わせてください。 – Basti

+0

私は別のクエリを使用して最大値を取得し、上記の@ nauphalのソリューションを使用しました。だからアイデアをありがとう! – MatthewLee

関連する問題