Я пытаюсь передать значение textInput в запрос MySQL.
Первый вопрос заключается в правильном синтаксисе оператора LIKE в сочетании с textInput при использовании MySQL в качестве драйвера? Где я должен помещать %% в запрос?
Во-вторых, насколько наилучшим образом я могу захватить реактивность 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))
Похожие вопросы Как читать TextInput в ui.R, обрабатывать запрос с этим значением в global.R и показывать в server.R с помощью Shiny, который имеет дело с выходом и работает с глобальным файлом, которого у меня нет в моем случае.
Любое понимание будет приветствоваться.
Ваш текущий код должен построить этот 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%'
Для тестирования я бы рекомендовал визуализировать сгенерированный SQL как текст с помощью renderText()
и verbatimTextOutput()
и посмотреть результат.
Вы также можете использовать пакет glue для безопасного создания SQL-запросов.
Для вашего второго вопроса может быть полезна статья Action Buttons.