我有2个表,我加入他们。如何对mysql的两个不同的值进行排序?
我有一个special_id
场,如果special_id
场> -1
那么它们应该被打印出来以前只是那些special_id < -1
。 然后我想订购他们name
。
我该怎么做?
一个简单的order by special_id asc, name desc
是不够的。
我有2个表,我加入他们。如何对mysql的两个不同的值进行排序?
我有一个special_id
场,如果special_id
场> -1
那么它们应该被打印出来以前只是那些special_id < -1
。 然后我想订购他们name
。
我该怎么做?
一个简单的order by special_id asc, name desc
是不够的。
其周围的其他方式:
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
尝试是这样的:
(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 |
/************************/
希望有所帮助。
这听起来不错!添加一个常数,你到底意味着什么? – krackmoe 2011-05-26 08:56:07
我编辑了一个查询例子 – 2011-05-26 09:07:50
mh ..不知何故,它不工作如何我想它是..:/ 如果我这样做就像你说..订单似乎是随机的... – krackmoe 2011-05-26 09:19:16