Синтаксис для передачи значения textInput в запрос MYSQL - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь передать значение 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 , который имеет дело с выводом и имеет дело с глобальным файлом, который У меня нет в моем случае.

Любое понимание будет приветствоваться.

1 Ответ

0 голосов
/ 26 апреля 2018

Ваш текущий код должен создать этот 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-запросов.

Для вашего второго вопроса может быть полезна статья Кнопки действий .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...