想象一下这样一个简单的例子:designer
,developer
或reviewer
存储在表work
中,如下所示:
+----+----------+-----------+----------+
| id | designer | developer | reviewer |
+----+----------+-----------+----------+
| 1 | sudo_O | fred | bob |
| 2 | fred | bob | sudo_O |
| 3 | bob | sudo_O | fred |
| 4 | sudo_O | fred | bob |
| 5 | bob | sudo_O | fred |
| 6 | fred | bob | sudo_O |
| 7 | fred | bob | john |
| 8 | john | bob | fred |
+----+----------+-----------+----------+
查询表格以查找我的所有工作:
select * from work where designer='sudo_O' or developer='sudo_O' or reveiwer ...
是否可以按工作类型即设计,开发,审核来订购结果,如下所示:
1, sudo_O, fred, bob
4, sudo_O, fred, bob
3, bob, sudo_O, fred
5, bob, sudo_O, fred
2, fred, bob, sudo_O
6, fred, bob, sudo_O
这就是我首先展示的所有设计工作,然后是开发,然后是审查。
答案 0 :(得分:3)
SELECT id, designer, developer, reviewer
FROM work
WHERE designer = 'sudo_O' OR developer = 'sudo_O' OR reviewer = 'sudo_O'
ORDER BY
CASE 'sudo_O'
WHEN designer THEN 1
WHEN developer THEN 2
WHEN reviewer THEN 3
END, id ;
或者像这样(在大表和3个索引上可能更有效,每列一个):
SELECT id, designer, developer, reviewer
FROM
( SELECT id, designer, developer, reviewer, 1 AS ord
FROM work
WHERE designer = 'sudo_O'
UNION ALL
SELECT id, designer, developer, reviewer, 2
FROM work
WHERE developer = 'sudo_O'
UNION ALL
SELECT id, designer, developer, reviewer, 3
FROM work
WHERE reviewer = 'sudo_O'
) AS t
ORDER BY ord, id ;