2014-02-24 42 views
10

我在下面的sql中,想要創建多個ORDER BY。mysql按多個條件排序

SELECT 
    r.*, 
    s.uzunluq, 
    b.id, 
    au.status_id as aksessuar_status, 
    au.aksessuar_id, 
    au.aksessuar 
FROM 
    seksiya s, 
    result r 
LEFT JOIN bosh_seksiya_aksessuar b 
    ON 
    b.bosh_seksiya = r.model AND 
    b.ERK = :ses 
LEFT JOIN aksessuar_up au 
    ON au.model_id = r.res_id AND 
    au.user_id = :user_id AND 
    au.status_id = 9 
WHERE 
    r.user_id = :user_id AND 
    r.model=s.seksiya AND 
    s.erk = :ses AND 
    r.status_id IN (1,2,3,4,5) 
ORDER BY 
    r.res_id 

我認爲寫的PDO PDO對你來說並不重要,大家,導致我的問題只關於這個SQL。這個SQL的工作非常好,我只是想添加額外的功能。所以,尋找此列:r.status_id IN (1,2,3,4,5)

我已經給Order BY r.res_id

我的問題: 我想用多個訂單每個status_id

如何訂購:

ORDER BY r.res_id DESC WHERE r.status_id IN (1,2)

AND

ORDER BY r.res_id WHERE r.status_id IN (3,4,5)

在這個SQL?

+1

也許你會更好做一個'聯盟' – Mike

回答

9
ORDER BY IF(r.status_id IN (1,2), r.res_id, NULL) DESC, r.res_id 

與此ORDER BY子句將先與r.status_id IN (1,2)(因爲NULL值放在最後由高到低排序)顯示所有記錄排序記錄集,自己排序降序訂單號爲r.res_id;其次是按升序排序的所有其他值按r.res_id排序。

2

你可以使用union語法:

SELECT * FROM ((SELECT 
    r.*, 
    s.uzunluq, 
    b.id, 
    au.status_id as aksessuar_status, 
    au.aksessuar_id, 
    au.aksessuar, 
    1 as query_order 
FROM 
    seksiya s, 
    result r 
LEFT JOIN bosh_seksiya_aksessuar b 
    ON 
    b.bosh_seksiya = r.model AND 
    b.ERK = :ses 
LEFT JOIN aksessuar_up au 
    ON au.model_id = r.res_id AND 
    au.user_id = :user_id AND 
    au.status_id = 9 
WHERE 
    r.user_id = :user_id AND 
    r.model=s.seksiya AND 
    s.erk = :ses AND 
    r.status_id IN (1,2) 
ORDER BY 
    r.res_id DESC) as table1 
UNION 
(SELECT 
    r.*, 
    s.uzunluq, 
    b.id, 
    au.status_id as aksessuar_status, 
    au.aksessuar_id, 
    au.aksessuar, 
    0 as query_order 
FROM 
    seksiya s, 
    result r 
LEFT JOIN bosh_seksiya_aksessuar b 
    ON 
    b.bosh_seksiya = r.model AND 
    b.ERK = :ses 
LEFT JOIN aksessuar_up au 
    ON au.model_id = r.res_id AND 
    au.user_id = :user_id AND 
    au.status_id = 9 
WHERE 
    r.user_id = :user_id AND 
    r.model=s.seksiya AND 
    s.erk = :ses AND 
    r.status_id IN (3,4,5) 
ORDER BY 
    r.res_id) as table2) sa table3 ORDER BY query_order 
+0

OP想要一個作爲DESC另一個默認爲了 –

+0

沒問題修正了。 –

+2

請注意,不能在PDO中多次使用佔位符名稱,因此'UNION'的一半需要使用替代名稱(變量也需要綁定到該名稱)。 – eggyal