Снижение нагрузки за счет блестящего и sql - PullRequest
0 голосов
/ 05 февраля 2020

Я плохо владею английским sh, поэтому предложения могут быть неправильными.
Я создаю систему для сужения элементов поиска с помощью sql.

ui.R

shinyUI(
  fluidPage(
    actionButton("clear", "clear"),
    uiOutput("search1_ui"),
    uiOutput("search2_ui"),
    uiOutput("search3_ui"),
    actionButton("go", "go"),
    tableOutput("table")
  )
)

server.R

shinyServer(function(input, output) {


  output$search1_ui <- renderUI({
    sql <- "SELECT DISTINCT CountryCode FROM City;"
    query <- sqlInterpolate(pool, sql)
    x <- dbGetQuery(pool, query)
    x <- matrix(as.matrix(x), nrow(x), ncol(x))
    x <- as.vector(t(x))
    x <- append("", x)
    selectInput("search1", "CountryCode", choices = x)
  })

  output$search2_ui <- renderUI({
    sql <- "SELECT DISTINCT District FROM City WHERE CountryCode = ?coun;"
    query <- sqlInterpolate(pool, sql, coun = input$search1)
    x <- dbGetQuery(pool, query)
    x <- matrix(as.matrix(x), nrow(x), ncol(x))
    x <- as.vector(t(x))
    x <- append("", x)
    selectInput("search2", "District", choices = x)
  })

  output$search3_ui <- renderUI({
    sql <- "SELECT DISTINCT Name FROM City WHERE CountryCode = ?coun AND District = ?dist;"
    query <- sqlInterpolate(pool, sql, coun = input$search1, dist = input$search2)
    x <- dbGetQuery(pool, query)
    x <- matrix(as.matrix(x), nrow(x), ncol(x))
    x <- as.vector(t(x))
    x <- append("", x)
    selectInput("search3", "Name", choices = x)
  })

  observeEvent(input$go,{
    output$table <- renderTable({
      sql <- "SELECT * FROM City WHERE CountryCode = ?coun AND District = ?dist AND Name = ?name;"
      query <- sqlInterpolate(pool, sql, coun = isolate(input$search1), dist = isolate(input$search2), name  = isolate(input$search3))
      dbGetQuery(pool, query)
    })
  })

})

global.R

library(shiny)
library(DBI)
library(pool)

pool <- dbPool(
  drv = RMySQL::MySQL(),
  dbname = "shinydemo",
  host = "shiny-demo.csa7qlmguqrf.us-east-1.rds.amazonaws.com",
  username = "guest",
  password = "guest"
)

В этой системе три проблемы.
1, поскольку все sql запускаются во время запуска, он становится тяжелым. Можно ли при запуске использовать только sql из «search1»?

2, «search2» работает и отображается после выбора «search1». Может ли "search3" работать и отображаться после выбора "search2"?

3, я хочу создать кнопку очистки. Можно ли отобразить только search1 и очистить данные таблицы, нажав кнопку очистки?

В работе запросы относятся к различным таблицам, поэтому вы не можете объединять запросы сразу.
Спасибо

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