2013-04-24 67 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

相关问题