2011-05-26 80 views
2

我有2個表,我加入他們。如何對mysql的兩個不同的值進行排序?

我有一個special_id場,如果special_id> -1那麼它們應該被打印出來以前只是那些special_id < -1。 然後我想訂購他們name

我該怎麼做?

一個簡單的order by special_id asc, name desc是不夠的。

回答

1

其周圍的其他方式:

ORDER BY special_id DESC,ASC名

你必須在2(一個用於special_id> -1,其他爲special_id <的情況下拆分查詢 - 1,兩者均由用戶名排序),添加一個常數它們各自,UNION它們,然後排序加入恆定較早

實施例:

(SELECT 1 AS main_order, t.* FROM table t WHERE special_id > -1) 
UNION 
(SELECT 2 AS main_order, t.* FROM table t WHERE special_id < -1) 
ORDER BY main_order, name DESC 
+0

這聽起來不錯!添加一個常數,你到底意味着什麼? – krackmoe 2011-05-26 08:56:07

+1

我編輯了一個查詢例子 – 2011-05-26 09:07:50

+0

mh ..不知何故,它不工作如何我想它是..:/ 如果我這樣做就像你說..訂單似乎是隨機的... – krackmoe 2011-05-26 09:19:16

2

試像這樣:

SELECT IF(special_id > -1 , 1 , 0) AS order_help , m.* FROM mytable m  
ORDER BY order_help DESC, name DESC 
+0

@海伊姆Evgi謝謝+1 – mKorbel 2011-05-26 08:23:31

+0

mh ..那不完全是我想要的...因爲這是我的一樣...但只是與另一個如果:) ,這並不排序他們我想要的方式.. – krackmoe 2011-05-26 08:48:18

+0

什麼不好? – 2011-05-26 08:50:47

0

嘗試是這樣的:

(SELECT CASE WHEN special_id > -1 THEN 1 ELSE 0 END orderValue,t.* FROM table1 t) 
UNION 
(SELECT CASE WHEN special_id > -1 THEN 1 ELSE 0 END orderValue,t.* FROM table2 t) 
ORDER BY orderValue,name DESC; 

這裏是我的結果:

/*************************/ 
    | orderValue | name | 
    |  0  | foo | 
    |  0  | bar | 
    |  1  | foobar | 
    |  1  | barfoo | 
/************************/ 

希望有所幫助。

相關問題