Php 使用ORDER BY来执行这些术语查询

Php 使用ORDER BY来执行这些术语查询,php,mysql,sql,Php,Mysql,Sql,对,我有两个查询,它们扫描MYSQL数据库中的关键字,并返回它们,无论它们是a)在一起还是b)分开。我现在添加了一个名为“rank”的新列,它按顺序对它们进行排序。我在每个查询中添加了“ORDER BY rank”,当我输入一个术语时,结果会正确显示,但当输入两个或更多术语时,我会出现以下错误:MySQL查询错误:您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行“按等级排序”附近使用的正确语法。 结果是按id自动排序的。当我从一个查询中删除ORDER by标记时,另一个查

对,我有两个查询,它们扫描MYSQL数据库中的关键字,并返回它们,无论它们是a)在一起还是b)分开。我现在添加了一个名为“rank”的新列,它按顺序对它们进行排序。我在每个查询中添加了“ORDER BY rank”,当我输入一个术语时,结果会正确显示,但当输入两个或更多术语时,我会出现以下错误:MySQL查询错误:您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行“按等级排序”附近使用的正确语法。 结果是按id自动排序的。当我从一个查询中删除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";
    }

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";
将两个循环都更改为使用此模式,而不是使用当前的模式