php - 使用案例PDO全文搜索时如何按相关性排序

标签 php mysql pdo full-text-search

我有几个案例的查询:

$search = $_GET['search'];


$array = $pdo->prepare("SELECT * , CASE 
     WHEN CHAR_LENGTH(index.product_description) > 32 THEN CONCAT(SUBSTRING(index.product_description, 1, 32), '...') ELSE index.product_description
   END AS product_description, `product_title`, CASE 
     WHEN CHAR_LENGTH(index.product_title) > 18 THEN CONCAT(SUBSTRING(index.product_title, 1, 18), '...')
     ELSE index.product_title
   END AS product_title from `index` where MATCH (`product_title`) AGAINST (:search IN BOOLEAN MODE) and `category_name` = 'category1' LIMIT :start, :limit");
$array->execute(array(':search' => $search, ':start' => $start, ':limit' => $limit));

我想按相关性添加顺序,我在不使用案例的情况下单独工作:

$search = $_GET['search'];
$search2 = $_GET['search'];


$array = $pdo->prepare("SELECT * , MATCH (`product_title`) AGAINST (:search2 IN BOOLEAN MODE) AS relevance 
FROM `index` where MATCH (`product_title`) AGAINST (:search IN BOOLEAN MODE) and `category_name` = 'category1' order by relevance DESC LIMIT :start, :limit");
$array->execute(array(':search' => $search, ':search2' => $search2, ':start' => $start, ':limit' => $limit));

我尝试添加:

SELECT * , MATCH (`product_title`) AGAINST (:search2 IN BOOLEAN MODE) AS relevance 
FROM `index`

案例前后,它似乎不起作用。

在第一个查询中,我应该根据相关性添加顺序,或者在使用案例时应该如何构建?

谢谢

最佳答案

您需要一个 order by 子句来按相关性排序。您可以将 MATCH 语句直接放在 order by 中:

SELECT index.*,
       (CASE WHEN CHAR_LENGTH(index.product_description) > 32
             THEN CONCAT(SUBSTRING(index.product_description, 1, 32), '...')
             ELSE index.product_description
        END) AS product_description, `product_title`,
       (CASE WHEN CHAR_LENGTH(index.product_title) > 18
             THEN CONCAT(SUBSTRING(index.product_title, 1, 18), '...')
             ELSE index.product_title
        END) AS product_title
from `index`
where MATCH (`product_title`) AGAINST (:search IN BOOLEAN MODE) and `category_name` = 'category1'
order by MATCH (`product_title`) AGAINST (:search IN BOOLEAN MODE) desc
LIMIT :start, :limit;

关于php - 使用案例PDO全文搜索时如何按相关性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22367846/

相关文章:

php - 转义 Redshift PostgreSQL 中的斜杠错误

php - 我想将来自 UE4 c++ 游戏的请求发送到我的 php 脚本,以便它与 mysql 数据库交互

php - 使用 PHP 检查 CSS 样式表是否对 if/else 语句有效

php - SQLSTATE[HY000] [1049] 未知数据库 'u675813745_ymeda'

php - 如何确保删除查询删除一行?

php - PDO获取最后插入的ID

MySql if unique 打印 true

php - 如何将查询结果插入php中的数组并在另一个数组中检查它们

php - 扩展 PDO 类

windows - 如何注册acpi事件通知?(AcpiInterfaces.RegisterForDeviceNotifications)