我在使用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;
});
});
我无法找到一种方法让它发挥作用。
感谢您的帮助!
答案 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'])