Usually, variables can be passed to SQL statements using paste. Interestingly this doesn\'t work with input variables in R shiny. Using the below code I get the following er
The data query needs to be evaluated in a reactive context.
One way would be to move the data query itself into the renderPlot() context e.g.
--server.R--
shinyServer(function(input, output) {
database <- dbConnect(MySQL(), group= "zugangsdaten", dbname= 'database')
output$main_plot <- renderPlot({
table <- dbGetQuery(database, statement =
paste("
SELECT a,b FROM table1
WHERE id = ",input$segment,"
AND created_at>='2015-08-01'
"))
plot(table$a,table$b)
})
})
However, it's better to construct a reactive conductor for the data which can be evaluated once when any updates happen and re-used in multiple reactive end-points (see here for details).
This would look something like:
--server.R--
shinyServer(function(input, output) {
database <- dbConnect(MySQL(), group= "zugangsdaten", dbname= 'database')
table <- reactive({
dbGetQuery(database, statement =
paste("
SELECT a,b FROM table1
WHERE id = ",input$segment,"
AND created_at>='2015-08-01'
")
)
})
output$main_plot <- renderPlot({
plot(table()$a,table()$b)
})
})
For flexibility you can also use sub
function to substitute part of the query string, this is quite clean approach
table <- reactive({
my_query <- 'SELECT a,b FROM table1 WHERE id = SOMETHING AND created_at >= 2015-08-01'
my_query <- sub("SOMETHING",input$segment,my_query)
dbGetQuery(database,noquote(my_query))
})