2016-02-04 72 views
1

我怎样才能得到基于两列mysql的升序结果?就像我想要1,2,3,4,5或1,1,2,2,3,4,4,5,5但其他值在其他列上。基于两列的升序结果mysql

sample table 
------------- 
col1 col2 
741  0 
742  0 
743  0 
744  0 
745  743 
------------ 

Expected output 

------------- 
col1 col2 
741  0 
742  0 
743  0 
745  743 
744  0 
------------ 

通过col1时,它会发现col2上的下一个数字,因此它将添加到asc。

+0

这是怎么发生的? 744不大于745 – Ceeee

+0

'col2'是否总是低于'col1'? – shmosel

回答

0

您可以通过子句

在您的订单时使用的情况下,试试这个:

SELECT  
FROM tablename 
ORDER BY 
    CASE 
     when col1 < col2 AND NOT col1 = 0 AND NOT col2 = 0 then col1 
     when col1 < col2 AND col1 = 0 then col2 
     when col2 < col1 AND NOT col1 = 0 AND NOT col2 = 0 then col2 
     when col2 < col1 AND col2 = 0 then col1 
    END DESC 
+0

感谢您的配偶,但我收到错误。 @shmosel答案完美。 –

0

我不能保证,这将适用于所有情况,但它应该满足您的例子:

SELECT col1, col2 
    FROM test 
ORDER BY IF(col2 = 0, col1, col2), col1; 

这个想法是,我们正在合并col2col1排序的目的,所以排序看到你的数据是这样的:

741 
742 
743 
743 -- pulled from col2 
744 

那么实际col1被用作决胜局把映射排第二,该假设是col1总是比col2更大。

+0

谢谢@shmosel!它完美的作品。什么是大脑。我在哪里可以得到这个文件? –

+0

@VandolphReyes MySQL SELECT记录在这里:http://dev.mysql.com/doc/refman/5.7/en/select.html – shmosel

+0

转移到发表评论 –

0

@shmosel。谢谢你的答案,它的方式。但就像你所说的那样,它并不适用于所有情况。当col2的价值已经被顶部调用时,它现在给出了不同的结果。我会尽力解释清楚。

这是现在新增加的值表。

------------- 
col1 col2 
741  0 
742  0 
743  0 
745  0 
746  743 
747  0 
748  0 
749  0 
750  746 
751  0 
752  746 
------------ 

这里是根据您的第一个答案得到的结果。

------------- 
col1 col2 
741  0 
742  0 
743  0 
746  743 
745  0 
750  746 
752  746 
747  0 
748  0 
749  0 
751  0 
------------ 

而且我所期待的是这个

------------- 
col1 col2 
741  0 
742  0 
743  0 
746  743 
750  746 
752  746 
745  0 
747  0 
748  0 
749  0 
751  0 
------------ 

如此以来,746(COL1)对COL2下一个号码,所以应该优先考虑那些。我忘了提及col1是独一无二的,而不是col2。 col2基于col1插入。所以这就像计算这一点。 col 1然后col2。对不清楚的问题抱歉。