我有一个包含项目的表格,我表格中的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";
此代码获取项目名称与查询类似的所有项目,或者包含与查询类似的关键字。 如何订购结果,以便名称与查询类似的项目出现在包含类似查询的关键字的项目之前? 刚才它只是命令首先添加到数据库中的项目。
答案 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"