如何在postgresql和node js中进行类似的搜索

时间:2013-10-19 22:14:19

标签: node.js postgresql sql-like

我使用节点js和模块pg连接到postrgresql 我想搜索一个标签数据库,但我不能让它工作, 在变量标签中我保存了url的param,但是consult不会返回任何结果。 我该怎么办?

app.get("/tags", function(req, res){
        var tag = req.query.q;
        res.json(tag)
        var search = db.client.query("SELECT * FROM tags WHERE name LIKE '%$1%'", [tag], function(err, result){
                res.json(result);
            }
        );
    });

2 个答案:

答案 0 :(得分:16)

我不知道node.js PostgreSQL接口,但我认为我可以看到问题。这是一个包含编号占位符的SQL字符串文字:

'%$1%'

该字符串中的$1不会被tag的值替换,因为字符串中的占位符根本不是占位符,它们只是碰巧具有相同形式的子串占位符。

两个常用选项是:

  1. 在客户端代码中添加%通配符。
  2. %通配符连接到数据库中的字符串。
  3. 第一个看起来像这样:

    db.client.query("SELECT * FROM tags WHERE name LIKE $1", ['%' + tag + '%'], ...
    

    和第二个像这样:

    db.client.query("SELECT * FROM tags WHERE name LIKE '%' || $1 || '%'", [tag], ...
    

    使用您喜欢的任何方法。

答案 1 :(得分:5)

ES6解决方案类似于:

client.query('select * from users where user_name Ilike $1', [`%${req.query.q}%`], (err1, result) => { ...