如何将标记区域转换为 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().