2012-08-12 86 views
3

对我有两个查询,扫描MYSQL数据库的关键字,并返回他们,无论他们是)一起或b)分开。我现在添加了一个名为“排名”的新栏目,按顺序排列它们。我在每个查询中添加了'ORDER BY rank',当我输入一个单词时,结果显示正确,但是当输入两个或更多项时,出现以下错误:MySQL Query Error:您的SQL语法错误;请检查与您的MySQL服务器版本相对应的手册,以便在第1行'ORDER BY rank'附近使用正确的语法。 结果按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必须位于循环的末尾,而不是在循环中。否则,你每次查询,这是无效的多个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"; 

变化你的循环使用这种模式,而不是你目前拥有的两个

+0

谢谢!我很高兴 – 2012-08-12 11:57:33