Mysql:按顺序排序?

dfe*_*ens 31 mysql sql sql-order-by sql-like

假设我们使用关键字执行搜索: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%")
Run Code Online (Sandbox Code Playgroud)

它将选择记录:1,2,3(按此顺序),但我想在示例中按关键字排序,keyword1=John, keyword2=Doe 所以它应该按关键字列出:1,3,2(因为我想在之后搜索"Doe"寻找"约翰")

我在考虑SELECT DISTINCT FROM (...... UNION .....) 但是以某种方式以另一种方式订购它会更容易(真正的查询真的很长)

是否有任何技巧来创建这样的订单?

Red*_*ter 64

order by case 
    when name LIKE "%John%" then 1 
    when name LIKE "%Doe%"  then 2 
    else 3 
end
Run Code Online (Sandbox Code Playgroud)


Jua*_*ino 6

为了构建 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
Run Code Online (Sandbox Code Playgroud)