如何将标记区域转换为 PostgreSQL 查询?
How to translate tag area into a PostgreSQL query?
我有一个标签区域,可以选择 0...N 个标签。标记区域给出一个逗号分隔的列表,然后将其发送到服务器进行进一步处理。
例如,标签 csv-list 可以如下所示:
var taglist = ['important', 'less important']
我用它创建了一个数组,供 LIKE ANY 处理。
var taglistArray = pgp.as.array(taglist);
LIKE ANY 有一个可能的方法,但我无法让它工作。
select * from :name WHERE importance LIKE ANY :list
...
['tablename', field2, field3, taglistArray]
error: syntax error at or near "'array[''important'',''less important'']'"
如果标签区域为空(因此查询应该 return 一切而不是什么都没有)和查询列表而不是仅查询一个关键字的能力,似乎有几个问题。
如何使用 pg-promise 以最佳方式将标签列表转换为 SQL 查询?
As per documentation examples,你直接用数组,没有预先转成字符串:
var taglist = ['one', 'two'];
db.any('select * from :name WHERE importance LIKE ANY()', ['important', tagList])
并且您的代码对数组进行了两次格式化,因此出现了双重转义问题。它仅适用于 IN(:list)
你会使用 :list
过滤器,但对于 ANY
你需要直接数组,即 ANY()
,没有任何过滤器。
此外,ANY
的正确语法是带括号 - ANY()
.
我有一个标签区域,可以选择 0...N 个标签。标记区域给出一个逗号分隔的列表,然后将其发送到服务器进行进一步处理。 例如,标签 csv-list 可以如下所示:
var taglist = ['important', 'less important']
我用它创建了一个数组,供 LIKE ANY 处理。
var taglistArray = pgp.as.array(taglist);
LIKE ANY 有一个可能的方法,但我无法让它工作。
select * from :name WHERE importance LIKE ANY :list
...
['tablename', field2, field3, taglistArray]
error: syntax error at or near "'array[''important'',''less important'']'"
如果标签区域为空(因此查询应该 return 一切而不是什么都没有)和查询列表而不是仅查询一个关键字的能力,似乎有几个问题。
如何使用 pg-promise 以最佳方式将标签列表转换为 SQL 查询?
As per documentation examples,你直接用数组,没有预先转成字符串:
var taglist = ['one', 'two'];
db.any('select * from :name WHERE importance LIKE ANY()', ['important', tagList])
并且您的代码对数组进行了两次格式化,因此出现了双重转义问题。它仅适用于 IN(:list)
你会使用 :list
过滤器,但对于 ANY
你需要直接数组,即 ANY()
,没有任何过滤器。
此外,ANY
的正确语法是带括号 - ANY()
.