首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对这些术语查询使用ORDER BY

问对这些术语查询使用ORDER BY
EN

Stack Overflow用户
提问于 2012-08-12 19:46:52
回答 1查看 86关注 0票数 3

对了,我有两个查询,它们扫描MYSQL数据库中的关键字,并返回它们,无论它们是a)在一起还是b)分开。我现在添加了一个名为'rank‘的新列,它按顺序对它们进行排序。我在每个查询中添加了'ORDER BY rank‘,当我输入一个术语时,结果是正确显示的,但当输入两个或更多的术语时,我得到这个错误: MySQL查询错误:您的MySQL语法中有一个错误;请查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在第1行使用接近'ORDER BY rank’的语法。结果将自动按id排序。当我仅从一个查询中删除ORDER BY标记时,另一个查询的标记将不起作用。我还是不明白?我的问题如下。

代码语言:javascript
复制
    // 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";
    }
EN

回答 1

Stack Overflow用户

发布于 2012-08-12 19:49:04

ORDER BY必须出现在循环的末尾,而不是循环内部。否则,每次查询会得到多条ORDER BY语句,这是无效的:

代码语言:javascript
复制
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";

将您的两个循环都更改为使用此模式,而不是当前拥有的模式。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11921909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档