Создание SQL-запроса с использованием selectinput в R блестящий - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь создать динамический запрос, используя select input.

Что-то вроде

Выберите * из корзины, в которой есть фрукты ("яблоко", "банан", "вишня")

У меня есть таблица с именем fruit_list, которая заполняет мое поле ввода ввода.

selectInput ("fruit_list", label = h5 ("Select fruit"), несколько = T, choices = (dbGetQuery (conn,"SELECT fruit from fruit_list ');")))

Пока что, когда я отрисовываю свой выбор, я получаю "яблоко", "банан", "вишню". Мне нужна запятая между элементами, чтобы получить "яблоко","банан", "вишня" Когда я выбираю один элемент из поля множественного выбора "яблоко"

Выберите * из корзины, где фрукты в ("яблоко")

, мое приложение работает отлично.Однако, когда я выбираю более одного элемента «яблоко» «банан», я получаю сообщение об ошибке: Ожидается одно строковое значение: [тип = символ;экстент = 2].

Я прошу прощения за то, что не был так явно в начале

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Предположим, ans - это непустое подмножество c("a", "b", "c", "d").Например,

ans <- c("b", "d")
sprintf("select * from table where item in (%s)", toString(shQuote(ans, "csh")))

дает:

[1] "select * from table where item in ('b', 'd')"

Если вы используете R 3.6 или выше, вы можете при желании заменить shQuote(ans, "csh") на sQuote(ans, FALSE).

Если a, b, c, d в вопросе должны были представлять числа, то нам не нужны кавычки, поэтому мы можем заменить toString(...) просто toString(ans).

Пакеты не используются.

0 голосов
/ 23 сентября 2019

selectInput принимает пользовательский ввод как символьный вектор, glue должно быть проще в использовании, когда ваш запрос более сложный.

library(glue)
# user_input <- input$selectInput # e.g. c("a","b","c","d")
user_input <- c("a","b","c","d")
sql_where <- paste0(user_input,collapse = ", ")
glue("select * from table where item in ({sql_where})")

Он переводится в:

select * from table where item in (a, b, c, d)
...