从mysql订购搜索结果

时间:2013-12-02 19:34:02

标签: php mysql sql select sql-like

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

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

此代码获取项目名称与查询类似的所有项目,或者包含与查询类似的关键字。 如何订购结果,以便名称与查询类似的项目出现在包含类似查询的关键字的项目之前? 刚才它只是命令首先添加到数据库中的项目。

3 个答案:

答案 0 :(得分:2)

你可以这样试试

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

旁注:考虑使用prepared statements而不是插入查询字符串。

答案 1 :(得分:0)

您可以使用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

答案 2 :(得分:0)

尝试这样的事情:

$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"