2011-02-18 74 views
1

我試圖交換表中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 

如何才能做到這一點?

+0

好像表面上是一個壞主意。你能提供一些背景知道你爲什麼需要這樣做嗎? – 2011-02-18 20:10:48

+0

可能的重複http://stackoverflow.com/questions/37649/swapping-column-values-in-mysql – Damp 2011-02-18 20:11:36

+0

我需要這個來改變位置.. @Damp:tnx這個 – 2011-02-18 20:18:19

回答

2

您可以添加一個稱爲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 
2

您可以在兩個變量選擇兩個值,然後更新表:

  • 設置兩個變量

    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; 
    
1

通過從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; 
相關問題