从mysql中排序搜索结果


ordering search results from mysql

我有一个包含项的表,表中的两个属性是name(项的名称)和keywords(与该项有关的单词)。当我在数据库中搜索项目时,我使用以下代码。我将搜索条目q=""存储在变量$query中。我的mysql搜索如下。。

    $q = "SELECT * FROM items WHERE name LIKE '%$query%' OR keywords LIKE '%$query%' AND status = '1'  LIMIT $start, $per_page";

此代码获取我的所有项,其中项的名称与查询类似,或者它包含与查询类似的关键字。。如何对结果进行排序,使名称与查询类似的项目出现在包含与查询类似关键字的项目之前?现在,它只是对首先添加到数据库中的项目进行排序。

你可以这样尝试

SELECT * 
  FROM items 
 WHERE (name LIKE '%$query%' 
    OR keywords LIKE '%$query%') 
   AND status = '1' 
 ORDER BY (name LIKE '%$query%') DESC, name, keywords
 LIMIT $start, $per_page

附带说明:考虑使用准备好的语句,而不是插入查询字符串。

您可以使用CASE语句为OrderValue赋值,然后按OrderValue:排序

SELECT *, 
  CASE WHEN name LIKE '%$query%' 
    THEN 1 
    ELSE 2 END AS OrderValue 
FROM items 
WHERE name LIKE '%$query%' 
  OR keywords LIKE '%$query%' 
  AND status = '1' 
ORDER BY OrderValue 
LIMIT $start, $per_page

试试这样的东西:

$q = 
"SELECT * FROM items WHERE name LIKE '%$query%' AND status = '1'
 UNION
 SELECT * FROM items WHERE keywords LIKE '%$query%' AND status = '1'  
 LIMIT $start, $per_page"