2016-06-29 7 views
0

Я пытаюсь создать строку запроса url, где вы вводите параметр, и он ищет мою базу данных MySQL (сохраненные кавычки из канала irc) для одной случайной цитаты с переменной, введенной в LIKE, при но не имея проблем с поиском более одного столбца с запросом, который я использую. Два поля в таблице, которую я хочу найти, это «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-пункт должно быть истинным. Вы проверяете заголовокORquote. Если условие A встречается в ИЛИ, оно выходит и не проверяет второе условие. Вы можете проверить это нравится:

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

Это решает, как

  1. название содержит? А цитата содержит?

    Да: строка возврата No: GoTo2. Внутренний()

    1. Любое из этих двух полей содержит значение?

Да: возвращение строка Нет: не возвращается Row

Надеется, что это очищает его немного.

С наилучшими пожеланиями,

Georg

Смежные вопросы