基于两列mysql的升序结果

时间:2016-02-04 03:00:44

标签: php mysql codeigniter

如何根据两列mysql获得提升结果。就像我想要1,2,3,4,5或1,1,2,2,3,4,4,5,5,但其他列上的其他值。

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上添加。

3 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

我不能保证这会在所有情况下都有效,但它应该满足你的例子:

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

我们的想法是,我们将col2合并到col1进行排序,因此排序可以看到您的数据:

741
742
743
743  -- pulled from col2
744

然后将实际的col1用作决胜局,将映射的行放在第二位,假设col1总是大于col2

答案 2 :(得分: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。抱歉未解决的问题。