2012-08-12 4 views
3

바로 키워드에 대한 MYSQL 데이터베이스를 검색하고 두 개 쿼리를 사용하여 a) Together 또는 b)를 구분합니다. 이제는 '순위'라는 새 열을 추가하여 순위를 매겼습니다. 'ORDER BY rank'를 각 쿼리에 추가하고 단일 용어를 입력하면 결과가 올바르게 표시되지만 두 개 이상의 용어를 입력하면이 오류가 발생합니다. MySQL 쿼리 오류 : SQL 구문에 오류가 있습니다. ; 오른쪽 구문이 1 행에서 'ORDER BY rank'근처에서 사용하도록 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. 결과는 자동으로 id에 의해 순위가 결정됩니다. 단 하나의 쿼리에서 ORDER BY 태그를 제거하면 다른 쿼리의 태그가 작동하지 않습니다. 나는 그것을 얻지 못 하느냐? 내 검색어는 아래와 같습니다.이 용어 쿼리에 ORDER BY를 사용합니다.

// Terms Together 
    $query = " SELECT * FROM scan WHERE "; 

$terms = array_map('mysql_real_escape_string', $terms); 
$i = 0; 
foreach ($terms as $each) { 
     if ($i++ !== 0){ 
      $query .= " AND "; 
     } 
     $query .= "keywords LIKE '%{$each}%' ORDER BY rank"; 
} 

      /* Query Statement Building - Terms Separate */ 
    $query = " SELECT * FROM scan WHERE "; 

    $terms = array_map('mysql_real_escape_string', $terms); 
    $i = 0; 
    foreach ($terms as $each) { 
      if ($i++ !== 0){ 
       $query .= " OR "; 
      } 
      $query .= "keywords LIKE '%{$each}%' ORDER BY rank"; 
    } 

답변

7

ORDER BY은 루프 내부가 아니라 루프의 끝에 있어야합니다.

foreach ($terms as $each) { 
     if ($i++ !== 0){ 
      $query .= " OR "; 
     } 
     $query .= "keywords LIKE '%{$each}%'"; 
} 
// Don't append the ORDER BY until after the loop 
$query .= " ORDER BY rank"; 

변경 대신에 당신이 현재 가지고있는이 패턴을 사용하도록 루프의 두 : 그렇지 않으면 여러 ORDER BY 잘못된 쿼리 당 문을 얻는다.

+0

감사합니다. 나는 매우 기쁘게 생각합니다 –

관련 문제