我正在尝试使用选择输入来创建动态查询。
类似
从装有水果的篮子(“苹果”,“香蕉”,“樱桃”)中选择*
我有一个名为fruit_list的表,该表填充了我的selectinput框。
selectInput(“ fruit_list”,标签= h5(“选择水果”),倍数= T,选择=(dbGetQuery(conn,“从fruit_list'中选择水果”;“)))
到目前为止,当我渲染选择时,我得到“苹果”,“香蕉”,“樱桃” 我需要在元素之间加逗号以获取“苹果”,“香蕉”,“樱桃” 当我从多选框“苹果”中选择一个元素
从装有水果(“苹果”)的篮子中选择*
我的应用程序运行完美。但是,当我选择多个元素“ apple”和“ banana”时,出现错误:期望单个字符串值:[type = character;范围= 2]。
很抱歉在开始时没有这么明确
答案 0 :(得分:1)
假设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
应该代表数字,那么我们就不需要引号,因此可以替换{{1 }}仅toString(...)
。
不使用任何软件包。
答案 1 :(得分:0)
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)