2013-04-24 75 views
0

我已經通過現有的答案,看着這個存在,但似乎無法找到正確的適合,所以:的MySQL將數據移動到另一列,如果數據已經在該列

我有一個數據庫由具有多列的php表單填充:

name | latest_figure | previous_figure1 | previous_figure2 | previous_figure3

我可以使用典型的mysql查詢來更新表,但如果數據已經存在於該字段中,我需要將數據更新到右側進行更新。

例如,如果我們有:

名=李,latest_figure = 80

我現在想

名=李更新表,latest_figure = 85,我想原來80的數字移動到previous_figure1列中。

如果我們再次更新表,並且name = Lee有latest_figure = 88,我希望85移動到previous_figure1和80移動到previous_figure2,依此類推。

的原因的數據的保存爲圖形的原因,以顯示進度/惡化等

任何幫助將不勝感激。

+1

您使用的是不同的數據庫結構TBH更加規範化,所以你可能有一個向tblUsers,tbldata的更好。 tblusers容器UserID,UserName。 tbldata包含自動增量ID列,用戶ID,數據,所以如果你想爲用戶拉出數據,你只需做「SELECT * FROM tbldata WHERE UserID = $ userid ORDER BY ID DESC」,最新的優先。如果您想先做最早的變更,請將DESC更改爲ASC。這種格式還允許您存儲更大的數據集,而無需每次都添加列。查看數據標準化(用z表示陰陽拼寫) – Dave 2013-04-24 14:21:24

+1

嘗試'UPDATE table previous_figure3 = previous_figure2,previous_figure2 = previous_figure1,previous_figure1 = latest_figure,latest_figure = 85 WHERE name ='Lee'' – Waygood 2013-04-24 14:22:49

回答

2

我認爲你應該重寫你的表格。你應該有一個表格:

name |圖|時間戳

然後,您總是可以通過名稱和時間戳順序獲取數字,以便您知道哪些是最新的。這比一直製作新專欄更容易。

希望這會有所幫助。

+0

Thanks Dieter。雖然我需要保留舊的數字? – LeeG 2013-04-24 14:21:04

+0

如果您在插入新值時添加時間戳,您仍然會保留舊值? – Naruto 2013-04-24 14:23:03

+0

如果您使用GROUP BY名稱,但他的方法不好,他的方法可行。如果人們有相同的名字會怎麼樣! – Dave 2013-04-24 14:23:11

0

如果設置了主鍵,您可以嘗試使用ON DUPLICATE KEY。

INSERT INTO table (name, latest_figure) VALUES("Lee", 85) ON DUPLICATE KEY UPDATE previous_figure3 = previous_figure2, previous_figure2 = previous_figure1, previous_figure1 = latest_figure, latest_figure = 85; 

希望它能幫助:)

+0

我同意你應該重寫你的表格。 – 2013-04-24 14:32:14

相關問題