我正在分叉一个项目,并希望将表模式之一转换为更多..可行的结构

目前:

steamid | mapname | cp1 | cp2 | cp3 | cp4 | cp5 | cp6 | cp7 | cp8 | cp9 | cp10 | cp 11 | cp12 | cp13 | cp14 | cp15 | cp16 | cp17 | cp18 | cp19 | cp20 | cp21  | cp22 | cp23 | cp24 | cp25 | cp26 | cp27 | cp28 | cp29 | cp30 | cp31 | cp32 | cp33 | cp34 | cp35 | zonegroup


steamid是用户ID,mapname是地图,cp#列存储特定检查点的玩家时间,zonegroup存储地图的“阶段”

我想将其更改为:

steamid | mapname | cp | time | zonegroup


是否有任何现实的解决方案可以在转换表的同时保留数据,因此将先前存储在cp1中的时间移动到新的cp列,该列的值为1,新的time列将包含旧的内容cp1栏

谢谢!

最佳答案

您可以使用冗长的INSERT ... SELECT查询将数据传输到新表中:

INSERT INTO new_table (steamid, mapname, cp, time, zonegroup)
SELECT * FROM (
    SELECT steamid, mapname, 1 AS cp, cp1 AS time, zonegroup FROM old_table
    UNION ALL
    SELECT steamid, mapname, 2, cp2, zonegroup FROM old_table
    UNION ALL
    ...
    SELECT steamid, mapname, 35, cp35, zonegroup FROM old_table) v

10-05 19:29