使用rmysql向现有的mysql表添加一个新列

gt0wga4j  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(197)

我需要一个更好的主意 RMySQL .
我有一个数据框 myTable 存储在mysql服务器中。每一行代表一个客户的订单,并包含客户名称、订单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)

以及Dataframe export 看起来像这个 R .

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等)的格式。
idea2:用上面的查询调用一个表,生成一个新的Dataframe billing 只有 Order_ID 以及 Billed 列,并在mysql服务器中合并 billing 原始数据表 Tour_ID .
在这两种情况下,我都不确定服务器中的原始数据表会发生什么情况,尤其是服务器没有获取的行 dbGetQuery 功能。它会创建一个新的列吗 Billed 覆盖的行使用0和1,其他行是否都是nas?
因此,我正在寻找任何更好和稳定的想法来完成这项任务。工作流程好吗?我应该使用什么样的函数?
谢谢你的帮助!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题