2013-05-09 72 views
0

想象的那么简单情况下你要么是存储在表work像这样designerdeveloperreviewer排序对多个字段

+----+----------+-----------+----------+ 
| 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

是你发布你的输出显示? – 2013-05-09 10:12:54

+0

*您的工作类型*是什么意思?你指的是特定类型(即'sudo_0',然后'bob',然后'fred')? – hims056 2013-05-09 10:49:47

回答

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 ; 
+0

完美,谢谢。 – 2013-05-09 10:53:45

+0

第一个比较好。 – hims056 2013-05-09 10:59:57