我有一个查询,可以根据标题从数据库中获取联系人。它会查找多个标题,如果从同一个查询中返回多个联系人,我希望它们按特定顺序排列。这就是我的意思:
这是表格的一个例子:
id | name | title | email
-----+-----------+--------------------+------------------
1 | Bob | General Manager | bob@example.com
2 | John | President | john@example.com
3 | Sue | Owner | sue@example.com
我的查询是这样的:
SELECT * FROM tbl_contacts WHERE title IN ('General Manager', 'Owner', 'President')
如何使查询以特定顺序(或我的标题中的标题层次结构)返回结果?
我希望始终保持顺序的结果:
例如,如果没有该实体的总经理,我仍然希望保持相同的层次结构并返回:
答案 0 :(得分:4)
您想使用FIELD
功能。它返回给定字符串集中搜索字符串的位置。
select *
from tbl_contacts
where title in ('General Manager', 'Owner', 'President')
order by field(title, 'General Manager', 'Owner', 'President')
答案 1 :(得分:1)
在您的情况下,简单的ORDER BY
可以执行此操作:
SELECT * FROM tbl_contacts
WHERE title IN ('General Manager', 'Owner', 'President')
ORDER BY title ASC
另一种方式,如果标题不是按字母顺序排列的,您可以使用FIELD
使用以下内容:
SELECT * FROM tbl_contacts
WHERE title IN ('General Manager', 'Owner', 'President')
ORDER BY FIELD(title, 'General Manager', 'Owner', 'President')
答案 2 :(得分:1)
设置您自己的订单:
SELECT * FROM tbl_contacts
WHERE title IN ('General Manager', 'Owner', 'President')
ORDER BY CASE
WHEN title = 'Owner' THEN 0
WHEN title = 'President' THEN 1
WHEN title = 'General Manager' THEN 2
END