我需要一个更好的主意 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?
因此,我正在寻找任何更好和稳定的想法来完成这项任务。工作流程好吗?我应该使用什么样的函数?
谢谢你的帮助!
暂无答案!
目前还没有任何答案,快来回答吧!