我试图将textInput的值传递给MySQL查询。
第一个问题是当使用MySQL作为驱动程序时,LIKE运算符与textInput相结合的正确语法是什么?我应该在查询语句中放置%%?
其次是我如何才能最好地捕获textInput的反应性,以便能够将它传递给查询并创建表?
library(shiny)
library(DBI)
library(RMySQL)
server <- shinyServer(function(input, output, session) {
con <- dbConnect(MySQL(), user='user', port = 3306, password='pwd', dbname='db', host='host' )
on.exit(dbDisconnect(con), add = TRUE)
output$tableview <- renderTable({
con <- dbConnect(MySQL(), user='user', port = 3306, password='pwd', dbname='db', host='host' )
on.exit(dbDisconnect(con), add = TRUE)
table <- reactive({
dbGetQuery(con, statement =
paste0(" SELECT author, title, publicationDate, FROM publications
WHERE publications.abstract LIKE %'",input$textSearch,"'% ")
)
})
table()
})
session$onSessionEnded(function() { dbDisconnect(con) })
})
ui_panel <-
tabPanel("Text Input Test",
sidebarLayout(
sidebarPanel(
textInput("textSearch", " Search for keyword", ''),
br(),
submitButton("Update Table View"),
br()
),
mainPanel(
tabsetPanel(tabPanel("Table",tableOutput("tableview"))
)
)
))
ui <- shinyUI(navbarPage(" ",ui_panel))
runApp(list(ui=ui,server=server))
类似问题How to read a TextInput in ui.R, process a query with this value in global.R and show in server.R using Shiny处理输出和处理我不具备的全局文件。
欢迎任何见解。
答案 0 :(得分:1)
您当前的代码应该构造此SQL:
SELECT ... FROM publications WHERE publications.abstract LIKE %'test'%
问题: %
应位于''
内。
更新了一行:
paste0("SELECT author, title, publicationDate, FROM publications WHERE publications.abstract LIKE '%",input$textSearch,"%' ")
然后它应该构造这个SQL:
SELECT author, title, publicationDate, FROM publications WHERE publications.abstract LIKE '%test%'
为了进行测试,我建议使用renderText()
和verbatimTextOutput()
将生成的SQL呈现为文本,并查看结果。
您还可以考虑使用glue包来安全地构建SQL查询。
对于您的第二个问题,Action Buttons文章可能有用。