【问题标题】:How to add information to a specific column in a pre-existing database如何将信息添加到预先存在的数据库中的特定列
【发布时间】:2014-04-24 00:22:48
【问题描述】:

我有一个名为 week1 的数据库,其中包含以下列:age, address, voternum, voterhistory, status, gender, precinct, county, and zip5

voterhistory 之外的所有行的信息都已在表中!

我需要将voterhistory 列从名为vhist文本文件 中单独导入到其中week1 表的voternum 等于voternum 的表中vhist 文本文件。

文本文件中的多行可以放在voterhistory 列中,并且应该用逗号分隔。

例如:

在第 1 周内,有一个voternum = 1234 的人。
vhist 文本文件中有 3 条记录,其中 voternum = 1234

一个有一个voterhistory = 2011,一个有一个voterhistory = 2012,一个有一个voterhistory = 2013

这意味着在导入 vhist 文本文件时,这 3 条记录应导入到 week1 表的 voterhistory 列中,如下所示:2011, 2012, 2013

对不起,如果这听起来令人困惑,但这是我知道如何解释它的唯一方法。如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: php mysql database lamp


    【解决方案1】:

    在 MySQL 中,我们有一个名为 CONCAT_WS() 的函数,它基本上使用指定的分隔符连接字符串值。看看链接。

    我会使用临时表将 vhist 加载到内存中。然后将表 week1 连接到临时表 vhistory 并根据键匹配更新 week1。这使您不必在 SQL 连接中实现条件逻辑。

    在代码中它看起来像这样,您可能需要稍微处理一下才能让它运行:

    CREATE TEMPORARY TABLE vhistory  (
         voternum VARCHAR(10) NOT NULL
        , voterhistory VARCHAR(10)
       );
    
    LOAD DATA LOCAL INFILE '/path/vhist.txt' INTO TABLE vhistory;
    
    
    UPDATE week1 SET voterhistory=SELECT CONCAT_WS(SELECT ',',voterhistory FROM vhistory
    WHERE week1-voternum = vhistory-voternum );
    

    我没有运行此代码,因为我没有您的数据。

    【讨论】:

    • 当我尝试更新 week1 时,最后一段似乎有错误。关于它可能是什么的任何想法? "#1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在 'SELECT CONCAT_WS(SELECT ',',voterhistory FROM vhistory WHERE week1-voternum = vhistory-voternum 附近使用正确的语法);'在第 1 行“
    • 我没有您的架构或表格布局,因此您必须稍微处理此代码才能使其为您工作。它代表了一个坚实的开始。您可能需要创建第二个临时表来存储您的连接结果,然后将其加入第 1 周
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多