php - 对这些术语查询使用 ORDER BY

标签 php mysql sql

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

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

关于php - 对这些术语查询使用 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11921909/

相关文章:

mysql - mysql如何按天、同时进行查询?

mysql - 同一表上的 SQL 连接或子查询帮助

php - while 循环内的 foreach 返回重复数据

PHP、MySQL、Huge Join、处理速度

java - 建立 URL 连接会使我的应用程序崩溃

sql - 在 SQL 中使用两个 DISTINCT 语句

sql - 将行插入仅包含一个 IDENTITY 列的表中

php - mysql选择日期之间

php - 根据全名php生成随机用户名

php - Laravel 4 - 迁移和外键问题