假设我们使用关键字执行搜索:keyword1,keyword2,keyword3
数据库中有“name”列的记录:
1: John Doe 2: Samuel Doe 3: John Smith 4: Anna Smith
现在查询:
SELECT * FROM users WHERE (name LIKE "%John%" OR name LIKE "%Doe%")
它将选择记录:1,2,3(按此顺序)
但我想按关键字订购
在示例中keyword1=John, keyword2=Doe
因此它应该按关键字列出:1,3,2(因为我想在搜索“John”后搜索“Doe”)
我在想SELECT DISTINCT FROM (...... UNION .....)
但以某种方式以另一种方式订购它会更容易(真正的查询真的很长)
是否有创建此类订单的技巧?
答案 0 :(得分:58)
order by case
when name LIKE "%John%" then 1
when name LIKE "%Doe%" then 2
else 3
end
答案 1 :(得分:3)
阅读Boolean Fulltext Searches,您可以订购。
答案 2 :(得分:3)
要构建RedFilter的答案,您可以将包含两个关键字的行放在顶部:
order by case
when (name LIKE "%John%" and name LIKE "%Doe%") then 1
when name LIKE "%John%" then 2
when name LIKE "%Doe%" then 3
end
答案 3 :(得分:2)
SELECT *
from
(
SELECT u.*, 1 OrderNum
FROM users
WHERE (name LIKE "%John%")
UNION
SELECT u.*, 2 OrderNum
FROM users
WHERE (name LIKE "%Doe%")
)
Order by OrderNum
答案 4 :(得分:-1)
我的示例将按字母顺序排列所有John
&#{1}}。
Doe