2013-05-09 93 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