使用RMySQL将新列添加到现有mysql表中

时间:2018-07-02 12:20:16

标签: mysql sql r merge rmysql

我需要一个更好的主意来解决RMySQL

我有一个存储在MySQL服务器中的数据帧myTable。每行代表一个客户的订单,并包含客户名称,订单ID,日期等。

我的工作环境是R。每次我处理此表时,都使用RMySQL包调用数据。但是我永远不会调用全部数据,因为它太大而无法解决。相反,我使用如下语句过滤所需的数据:

db <- with(connectionDb, dbConnect(MySQL(),
                                   user = user,
                                   password= password,
                                   dbname = dbname,
                                   host = host))

# connectionDb returns user, password, dbname, host from our credential file.

dbSendQuery(conn = db, 'set character set "utf8"')


cond <- paste('SELECT * FROM myTable
              WHERE organisation LIKE "Ikea" 
              AND dateA >= "2018-05-01" AND dateA < "2018-06-01"')

export <- dbGetQuery(conn = db, statement = cond)

数据帧exportR中看起来像这样。

organisation   Order_ID         dateA       dateB       dateC       dateD  
Ikea                  a    2018-04-01  2018-05-07  2018-05-09  2018-05-01
Ikea                  a    2018-06-01  2018-05-03  2018-05-29          NA   
Ikea                  a    2018-04-02  2018-05-01  2018-07-08  2018-05-26 
Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26
Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26
Ikea                  b            NA  2018-05-05  2018-08-02  2018-06-01
Ikea                  c    2018-06-01  2018-05-07  2018-05-09  2018-05-01
Ikea                  c    2018-06-01  2018-05-03          NA          NA   
Ikea                  c    2018-08-02  2018-05-09  2018-07-08  2018-05-26

但是现在,在MySQL服务器中存储的表中,我想添加一个新列Billed,如果已经为订单付款,则为1,否则为0。因此结果应如下所示。

organisation   Order_ID         dateA       dateB       dateC       dateD    Billed
Ikea                  a    2018-04-01  2018-05-07  2018-05-09  2018-05-01         0
Ikea                  a    2018-06-01  2018-05-03  2018-05-29          NA         1
Ikea                  a    2018-04-02  2018-05-01  2018-07-08  2018-05-26         1
Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26         0
Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26         1
Ikea                  b            NA  2018-05-05  2018-08-02  2018-06-01         0
Ikea                  c    2018-06-01  2018-05-07  2018-05-09  2018-05-01         1
Ikea                  c    2018-06-01  2018-05-03          NA          NA         1
Ikea                  c    2018-08-02  2018-05-09  2018-07-08  2018-05-26         0

我有几个想法可以做到这一点,但是我不确定它们是否很好。

想法1:使用上面的查询调用表,在表R中添加新列,然后使用dbWriteTable函数覆盖整个表。但是我担心覆盖整个表可能会更改原始数据的格式(str,lgl,numeric等)。

想法2:使用上面的查询调用一个表,创建一个只有billingOrder_ID列的新数据框Billed,并在MySQL服务器中合并billingTour_ID的原始数据表。

无论哪种情况,我都不确定服务器中的原始数据表会发生什么,尤其是dbGetQuery函数未获取的行。会为被覆盖的行创建一个新列Billed并为0和1创建一个新列,对于其他行,它们是否全部为NA?

因此,我正在寻找更好,更稳定的想法来完成此任务。工作流程好吗?我应该使用哪种功能?

感谢您的帮助!

0 个答案:

没有答案