我有一个包含项的表,表中的两个属性是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"