pg-promise mulitple OR in where where

时间:2017-10-08 15:09:11

标签: node.js pg-promise

我在使用pg-promise时遇到了一些问题。

我想在WHERE子句中指定一个未定义数量的参数。

所有参数都将与OR连接。

db.any(
  'SELECT genre FROM genres'+
  'WHERE ( (genres.genre LIKE \'Animation\' OR genres.genre LIKE \'Action\') ')
  .then(function(data) {
    // success;
  })
  .catch(function(error) {
    // error;
  });
});

我没有逐个指定参数,而是有一个由用户传递的类型数组。

我想做这样的事......

var genres = ["Action", "Adventure", "Romantic"];   
db.any(
      'SELECT genre FROM genres'+
      'WHERE ( (genres.genre LIKE $1) '), [genres])
      .then(function(data) {
        // success;
      })
      .catch(function(error) {
        // error;
      });
});

我无法找到一种方法让它发挥作用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的问题更多是关于多LIKE次使用的PostgreSQL语法,而不是pg-promise。请参阅Combining multiple like queries

最简单的方法是使用LIKE ANY(array[...])语法:

const genres = ['Action', 'Adventure', 'Romantic'];

db.any('SELECT genre FROM genres WHERE genre LIKE ANY($1)'), [genres])
      .then(data => {
          // success, data = matching genres
      })
      .catch(error => {
          // error
      });
});

这将格式化并执行:

SELECT genre FROM genres WHERE genre LIKE ANY(array['Action', 'Adventure', 'Romantic'])