Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQLi中按相关性排序-如果在某一行中找到关键字,则首先按此进行排序_Php_Mysqli_Pdo - Fatal编程技术网

Php 在MySQLi中按相关性排序-如果在某一行中找到关键字,则首先按此进行排序

Php 在MySQLi中按相关性排序-如果在某一行中找到关键字,则首先按此进行排序,php,mysqli,pdo,Php,Mysqli,Pdo,我有一个在数据库中搜索文章的查询。我想更改查询,以便如果在“title”行中找到关键字,则查询应首先按该关键字排序,以便将其放在结果的顶部 在标题中包含关键字的结果应被视为比在文章内容中包含关键字更重要 这可以在查询本身中实现,还是需要某种算法 我的问题是: if (isset($_POST['search'])) { $search = filter_var($search, FILTER_SANITIZE_SPECIAL_CHARS); $sql = "SELECT * FROM

我有一个在数据库中搜索文章的查询。我想更改查询,以便如果在“
title
”行中找到关键字,则查询应首先按该关键字排序,以便将其放在结果的顶部

标题
中包含关键字的结果应被视为比在文章内容中包含关键字更重要

这可以在查询本身中实现,还是需要某种算法

我的问题是:

if (isset($_POST['search'])) {
  $search = filter_var($search, FILTER_SANITIZE_SPECIAL_CHARS);

  $sql = "SELECT * FROM mydb WHERE title LIKE :search OR description LIKE :search OR content LIKE :search ORDER BY dates DESC";

  $stmt = $pdo->prepare($sql);
  $stmt->bindValue(':search', '%' . $search . '%', PDO::PARAM_STR);
  $stmt->execute();
    if ($stmt->rowCount() > 0) {
        $result = $stmt->fetchAll();
        foreach($result as $row) {
          // Loop...
        }
    }
    else {

    }

  // Closing
  $stmt = null;
  $pdo = null;
}

所以,看来这一个毕竟有一个简单的解决方案——只需按
标题排序,如:搜索

$sql = "SELECT * FROM mydb WHERE title LIKE :search OR description LIKE :search OR content LIKE :search ORDER BY title LIKE :search DESC";

为了实现这一点,您需要从每个列的比较中返回一些值,显然这是一种直接的方法。您可以使用Levenshtein距离来执行此操作。一旦实现了,您就可以对这些值取最大值,并对该列应用排序