Mysql:按顺序排序?

时间:2010-08-31 12:48:28

标签: 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%")

它将选择记录:1,2,3(按此顺序) 但我想按关键字订购 在示例中keyword1=John, keyword2=Doe 因此它应该按关键字列出:1,3,2(因为我想在搜索“John”后搜索“Doe”)

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

是否有创建此类订单的技巧?

5 个答案:

答案 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