我試圖交換表中2記錄的列值。 我有一個主鍵:「recnr」如何交換表中2個記錄的列值?
Recnr File 1 img001.jpg 2 img002.jpg 5 img005.jpg 6 img006.jpg
我想要的文件img005.jpg向上移動一個地方是:
Recnr File 1 img001.jpg 2 img005.jpg 5 img002.jpg 6 img006.jpg
如何才能做到這一點?
我試圖交換表中2記錄的列值。 我有一個主鍵:「recnr」如何交換表中2個記錄的列值?
Recnr File 1 img001.jpg 2 img002.jpg 5 img005.jpg 6 img006.jpg
我想要的文件img005.jpg向上移動一個地方是:
Recnr File 1 img001.jpg 2 img005.jpg 5 img002.jpg 6 img006.jpg
如何才能做到這一點?
您可以添加一個稱爲weight的整數字段,並將其與ORDER BY子句一起使用。
,這將是您的原始數據集:
Recnr | File | weight
1 | img001.jpg | 0
2 | img002.jpg | 0
5 | img005.jpg | 0
6 | img006.jpg | 0
並得到一個行高,你把它重量輕
Recnr | File | weight
1 | img001.jpg | 0
2 | img002.jpg | -10
5 | img005.jpg | 20
6 | img006.jpg | 0
然後你SELECT * ORDER BY重量ASC作出最輕的記錄出現在頂部。 其結果將是
Recnr | File | weight
2 | img002.jpg | -10
1 | img001.jpg | 0
6 | img006.jpg | 0
5 | img005.jpg | 20
您可以在兩個變量選擇兩個值,然後更新表:
設置兩個變量
SELECT @two:=File FROM mytable WHERE Recnr=2;
SELECT @five:=File FROM mytable WHERE Recnr=5;
更新表
UPDATE mytable SET [email protected] WHERE Recnr=2;
UPDATE mytable SET [email protected] WHERE Recnr=5;
通過從answer to Swapping column values in MySQL適應方法3,我想出了這個解決方案:
UPDATE your_table t1, your_table t2 SET
t1.File = (@temp:=t1.File),
t1.File = t2.File,
t2.File = @temp
WHERE t1.Recnr = 2 AND t2.Recnr = 5;
好像表面上是一個壞主意。你能提供一些背景知道你爲什麼需要這樣做嗎? – 2011-02-18 20:10:48
可能的重複http://stackoverflow.com/questions/37649/swapping-column-values-in-mysql – Damp 2011-02-18 20:11:36
我需要這個來改變位置.. @Damp:tnx這個 – 2011-02-18 20:18:19