Как перевести область тегов в запрос PostgreSQL? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть область тегов, где можно выбрать 0 ... N тегов.Область тегов содержит список, разделенный запятыми, который затем будет отправлен на сервер для дальнейшей обработки.Например, тег csv-list может выглядеть так:

var taglist = ['важный', 'менее важный']

Я создаю массив издля того, чтобы он обрабатывался LIKE ANY.

 var taglistArray = pgp.as.array(taglist);

Возможен способ с LIKE ANY, но я не смог заставить его работать.

 select * from $1:name WHERE importance LIKE ANY $4:list
 ...
 ['tablename', field2, field3, taglistArray]

error: syntax error at or near "'array[''important'',''less important'']'"

Кажется, есть несколькопроблемы, если область тега пуста (следовательно, запрос должен возвращать все, а не ничего) и возможность запрашивать список вместо одного ключевого слова.

Как наилучшим образом преобразовать список тегов в SQL-запрос с помощью pg-обещания?

1 Ответ

0 голосов
/ 22 октября 2018

В соответствии с примерами документации , вы используете массивы напрямую, а не преобразуете их в строки:

var taglist = ['one', 'two'];
db.any('select * from $1:name WHERE importance LIKE ANY($2)', ['important', tagList])

И ваш код форматирует массив дважды, и, следовательно, двойнойизбегая вопроса.Только для IN($2:list) вы бы использовали фильтр :list, но для ANY вам нужен массив напрямую, т. Е. ANY($2), без фильтра.

Кроме того, правильный синтаксис для ANY в скобках - ANY($2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...