我有几个案例的查询:
$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/