将mysql表的内容迁移到另一个表

时间:2016-03-25 16:34:15

标签: php mysql sql

我有一个小问题我有两个具有相同结构的mysql表“data”和“datas”。问题是第一个数据表已经填满并包含我想要迁移到第二个表“datas”的数据,但是我有一个字段,我刚刚在两个表中添加了一个调用“status”的字段,在填写此字段之前我检查状态是“专业”还是“分享”。 但是在第一个表“数据”上,由于我刚刚添加了状态字段,之前存储的数据,状态为NULL。 我想要做的是创建一个脚本,将所有存储的数据“数据”和每行进行验证,并用“pro”或“part”填充“status”字段,并将所有deuxièeme存储在表中“ DATAS”。

我使用Mysql。 我需要一个脚本来检查每一行,看看状态是“专业”还是“部分”,如果你有想法,请不要犹豫告诉我。

picture of data table structure

提前谢谢。

2 个答案:

答案 0 :(得分:0)

假设两个表中的所有字段都具有相同的顺序,状态是最后一个字段。

INSERT INTO datas(iddata,content, date, total, updatedate, statut)
    SELECT iddata,content, date, total, updatedate, 
           case when 1=1 then 'Pro' else 'Share' end as statut
    FROM data D 

显然,您必须更新案例陈述以符合确定专业与分享的规则。

您应该可以使用JSON_Extract()在假设它始终位于json文档中的相同位置之后提取您的特定类型。

所以给出你的json文档...类似......但如果你不想要确切的值,可能需要将它包装在case语句中。你可能需要改变字段" status"到包含json的表中的正确字段名称。

INSERT INTO datas(iddata,content, date, total, updatedate, statut)
    SELECT iddata,content, date, total, updatedate, 
           JSON_EXTRACT(status, "$.type") as statut
    FROM data D 

答案 1 :(得分:0)

INSERT INTO DATAS(IDDATA, CONTENT, DATE, TOTAL, UPDATEDATE, STATUT)
SELECT 
    IDDATA, 
    CONTENT, 
    DATE, 
    TOTAL, 
    UPDATEDATE, 
    CASE VARIABLE
        WHEN 'CONDITION' THEN 'PRO'
        WHEN 'CONDITION' THEN 'PART'
        ELSE 'DEFAULT_VALUE'
    END AS STATUT
FROM DATA

如果你的mysql版本可用,你可以使用JSON_EXTRACT,但json内容必须格式良好。

JSON_EXTRACT('{"pk": "12", "order": "1234","type":"part"}', '$.type')

完整示例

INSERT INTO DATAS(IDDATA, CONTENT, DATE, TOTAL, UPDATEDATE, STATUT)
SELECT 
    IDDATA, 
    CONTENT, 
    DATE, 
    TOTAL, 
    UPDATEDATE, 
    CASE JSON_EXTRACT(CONTENT, '$.type')
        WHEN 'pro' THEN 'PRO'
        WHEN 'part' THEN 'PART'
        ELSE NULL
    END AS STATUT
FROM DATA