WHERE子句中的多个列

时间:2016-06-29 03:31:19

标签: javascript mysql node.js express

我试图创建一个url查询字符串,在其中输入一个参数,它会搜索我的MySQL数据库(来自irc通道的存储引号),查找一个随机引用,一次输入LIKE但有问题让它使用我正在使用的查询搜索多个列。我希望它在表中搜索的两个字段是" title"和#34;引用"。有没有更好的方法呢?现在我只是为了测试目的而进入页面确认输出。如果只是搜索"标题"以下代码可以正常工作。或"引用"只有田野。

app.get("/api", function(req, res){

    var search = "%" + req.query.search + "%";
    var queryString = "SELECT * FROM quotes WHERE title LIKE ? ORDER BY RAND() LIMIT 1";
    var queryString =  mysql.format(queryString, search);
    mysqlPool.getConnection(function(err, connection) {
        if(err) throw err;
        connection.query(queryString, function(err, rows, fields){
            if (!err){
                res.send('<xmp>' + JSON.stringify(rows[0], null, 2) + '</xmp>');
                connection.release();
            } else {
                console.log('Error while performing Query.');
                connnection.release();
            }
        });
    });
});

我尝试过以下操作,但显然不起作用:

var queryString = "SELECT * FROM quotes WHERE (title OR quote) LIKE ? ORDER BY RAND() LIMIT 1";

仅使用&#34;标题&#34;输出的示例在这里搜索只是为了得到一个想法:

{
  "id": 3947,
  "nick": "o_O",
  "host": "o_O``!~o_O@*.ma.cable.rcn.com",
  "title": "gix.flesh.eating.bacteria",
  "quote": "<gix> omg my face is like 10lbs lighter",
  "channel": "#motorcycles",
  "timestamp": 1205791192
}

2 个答案:

答案 0 :(得分:2)

你不能那样使用LIKE,试试这个;)

var queryString = "SELECT * FROM quotes WHERE title LIKE ? OR quote LIKE ? ORDER BY RAND() LIMIT 1";

答案 1 :(得分:0)

WHERE-Clause 中的每个条件都必须为True。您正在查看标题 引用。 如果在 OR 中满足条件A,则退出并且不检查第二个条件。 你可以检查它:

WHERE
    (
     title like ? 
       and 
       quote like?
    OR
     (
        (title or quote) like ?
      )
    )

这解析就像

  1. 标题包含?并且引用包含?

    是:返回行 不:GoTo2。内部()

    1. 这两个字段中的任何一个都包含值?
  2. 是:返回行 否:不返回行

    希望这有点清除它。

    致以最诚挚的问候,

    乔治