2016-06-29 155 views
0

我想您在哪裏輸入參數的URL查詢字符串,並將其搜索一個隨機引用我的MySQL數據庫(存儲報價從一個IRC頻道),在一個像進入了一個變量但無法使用我正在使用的查詢搜索多個列。我希望它搜索的表格中的兩個字段是「title」和「quote」。有沒有更好的方法來做到這一點?現在,我只是爲了測試目的而去頁面確認輸出。下面的代碼工作正常,因爲如果僅僅搜索「title」或「quote」字段。多列WHERE子句

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"; 

例如只有「稱號」這裏搜索只是爲了得到一個想法:

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

回答

2

您不能使用LIKE這樣的,試試這個;)

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

WHERE子句每一個條件必須是真實的。正在檢查的標題OR報價。 如果條件A在中滿足,則退出並且不檢查第二個條件。 你可以檢查它想:

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

這解決像

  1. 標題包含?和報價包含?

    是:返回行 編號:GoTo2。內()

  2. 任何這兩個字段包含值?

是:返回行 否:不返回行

希望這會清除它一點。

最好的問候,

喬治