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

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

我需要一个更好的主意 RMySQL .
我有一个数据框 myTable 存储在mysql服务器中。每一行代表一个客户的订单,并包含客户名称、订单id、日期等。
我的工作环境是 R . 每次我在这个表周围工作时,我都使用 RMySQL 包裹。但我从不把整个数据都称之为数据,因为它太大了,无法处理。相反,我使用如下语句过滤所需的数据:

  1. db <- with(connectionDb, dbConnect(MySQL(),
  2. user = user,
  3. password= password,
  4. dbname = dbname,
  5. host = host))
  6. # connectionDb returns user, password, dbname, host from our credential file.
  7. dbSendQuery(conn = db, 'set character set "utf8"')
  8. cond <- paste('SELECT * FROM myTable
  9. WHERE organisation LIKE "Ikea"
  10. AND dateA >= "2018-05-01" AND dateA < "2018-06-01"')
  11. export <- dbGetQuery(conn = db, statement = cond)

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

  1. organisation Order_ID dateA dateB dateC dateD
  2. Ikea a 2018-04-01 2018-05-07 2018-05-09 2018-05-01
  3. Ikea a 2018-06-01 2018-05-03 2018-05-29 NA
  4. Ikea a 2018-04-02 2018-05-01 2018-07-08 2018-05-26
  5. Ikea b 2018-06-02 2018-05-01 NA 2018-05-26
  6. Ikea b 2018-06-02 2018-05-01 NA 2018-05-26
  7. Ikea b NA 2018-05-05 2018-08-02 2018-06-01
  8. Ikea c 2018-06-01 2018-05-07 2018-05-09 2018-05-01
  9. Ikea c 2018-06-01 2018-05-03 NA NA
  10. Ikea c 2018-08-02 2018-05-09 2018-07-08 2018-05-26

但是现在,在mysql服务器中存储的表中,我想添加一个新列 Billed ,如果我们已经为订单付费,则为1,如果我们还没有付费,则为0。所以结果应该是这样的。

  1. organisation Order_ID dateA dateB dateC dateD Billed
  2. Ikea a 2018-04-01 2018-05-07 2018-05-09 2018-05-01 0
  3. Ikea a 2018-06-01 2018-05-03 2018-05-29 NA 1
  4. Ikea a 2018-04-02 2018-05-01 2018-07-08 2018-05-26 1
  5. Ikea b 2018-06-02 2018-05-01 NA 2018-05-26 0
  6. Ikea b 2018-06-02 2018-05-01 NA 2018-05-26 1
  7. Ikea b NA 2018-05-05 2018-08-02 2018-06-01 0
  8. Ikea c 2018-06-01 2018-05-07 2018-05-09 2018-05-01 1
  9. Ikea c 2018-06-01 2018-05-03 NA NA 1
  10. 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?
因此,我正在寻找任何更好和稳定的想法来完成这项任务。工作流程好吗?我应该使用什么样的函数?
谢谢你的帮助!

暂无答案!

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

相关问题