2016-06-29 4 views
0

매개 변수를 입력하는 url 쿼리 문자열을 만들려고합니다. LIKE에 LIKE에 입력 한 임의의 견적에 대해 내 MySQL 데이터베이스 (irc 채널에서 저장된 인용 부호)를 검색합니다. 시간은 있지만 사용하는 쿼리로 둘 이상의 열을 검색하는 데 문제가 있습니다. 검색 할 테이블의 두 필드는 "제목"과 "인용"이었습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 지금 당장 테스트 목적으로 출력을 확인하기 위해 페이지로 간다. 아래의 코드는 "제목"또는 "인용문"필드 만 검색하면 제대로 작동합니다.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(); 
      } 
     }); 
    }); 
}); 

내가 분명히 아래에이 일을하지만 시도하는 작동하지 않습니다 :

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

: 출력의

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

예를 들어 그냥 "제목"으로 단지 아이디어를 얻을 여기 검색 이런 식으로 LIKE을 사용할 수 없습니다.)

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

귀하의 조건의 모든 조건은이어야합니다. 제목또는견적입니다. 조건 A가 또는에서 충족되면 두 번째 조건은 종료되고 확인되지 않습니다.

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

  1. 제목에 포함 된 같은 해결 : 당신은 좋아 확인할 수 있습니다? 그리고 견적에는 포함되어 있습니까?

    예 : 행 반환 아니요 : GoTo2. 내부()

    1. 두 필드 중 어느 값에?

예 : 리턴 행 아니오 : 행이 조금 그것을 정리할

희망을 반환하지 않습니다.

안부,

게오르그