2011-05-26 79 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 | 
/************************/ 

希望有所帮助。

相关问题