2016-07-16 14 views
1

私は光沢のあるアプリを構築しようとしています。私はデータベースに3つのテーブルを持っています。このアプリは、MySQLからデータテーブルを取得し、Webインターフェイスでポップアップします。関数では、すべての選択肢が言及されています。私のMySQLからデータを取得するとき、私はreadtableコマンドを3回書いた。 readtable文からデータを取得するオプションはありますか?テーブルからmysqlから光沢のあるデータを読み取る方法

for()機能が働くかもしれない
library(shiny) 

# Define UI for dataset viewer application 
ui<-fluidPage(

    # Application title. 
    titlePanel("More Widgets"), 

    sidebarLayout(
    sidebarPanel(
     selectInput("dataset", "Choose a dataset:", 
        choices = c("table1", "table2","table3")), 

     numericInput("obs", "Number of observations to view:", 10), 

     submitButton("Update View") 
    ), 

    mainPanel(

     h4("Observations"), 
     tableOutput("view") 
    ) 
) 
) 

# Define server logic required to summarize and view the 
# selected dataset 
server<-function(input, output) { 

    conn <- dbConnect(drv = RMySQL::MySQL(),dbname = "xxx",host = "localhost", 
    username = "root",password = "yyy") 
    on.exit(dbDisconnect(conn), add = TRUE) 
    table1<- dbReadTable(conn = conn, name = 'table1', value = as.data.frame(table1)) 
    table2<- dbReadTable(conn = conn, name = 'table2', value = as.data.frame(table2)) 
    table3<- dbReadTable(conn = conn, name = 'table3', value = as.data.frame(table3)) 

    # Return the requested dataset 
    datasetInput <- reactive({ 
    switch(input$dataset, 
      "table1" = table1, 
      "table2" = table2, 
     "table3" = table3 
      ) 
    }) 

    # Show the first "n" observations 
    output$view <- renderTable({ 
    head(datasetInput(), n = input$obs) 
    }) 
     on.exit(dbDisconnect(conn), add = TRUE) 

} 
shinyApp(ui, server) 

答えて

0

data <- c('table1', 'table2', 'table3') 

list_data <- list() 

for(i in 1:length(data)) {list_data[i] <- dbReadTable(conn = conn, name = data[i], value = as.data.frame(table1))} 
0

テーブルは非常に大きなされていない場合、あなたは以下の

output$view <- renderTable({ 
    head(dbReadTable(conn = conn, name = input$dataset), n = input$obs) 
}) 
で出力$ビューを交換する、すなわち、より容易なソリューションを選ぶことができ

このコードは、コードのようにテーブルをキャッシュしませんが、はるかに簡単です。ただし、データベース内のテーブルのサイズがそれほど大きくなければ、パフォーマンスの低下は小さくなります。

+0

ありがとう、皆さん。ジョリス・ギリス、おかげさまで助けてくれてありがとう。あなたのコードを使いたいと思うように働いています:) –

0

dbReadTableステートメントでデータセットの名前を手動で記述するのではなく、入力$ datasetを使用できます。

注:表の行が約30,000の場合は問題ありません。

これが役に立ちます。