-2

我的表:

    6   2/3/2013 row1
10      2/2/2013 row2
    1   1/3/2013 row3
2       1/3/2013 row4

如果 column1 有值(column2 将为空) 使用 column3 对行进行排序。仅对 column1 中具有值的行进行排序,而不对 column2 中具有值的行进行排序。

如果 column2 有值(column1 将为空),则按 column2 排序。仅对那些在 column2 中具有值的行进行排序,而不是对 column1 中具有值的行进行排序。

排序:

第一次迭代:

First column  column1 row1 is empty  and column2 has value so comparing row1 and row3, 1 is minimum so is in top.

    1   1/2/2013 row1
10      2/2/2013 row2
    6   2/3/2013 row3
2       1/3/2013 row4

第二次迭代:

First column column1  row2 is there  so it comparing row2 and row4 for column3 date 1/3/2013 < 2/2/2013 so swap .

    1   1/2/2013 row1
2       1/3/2013 row2
    6   2/3/2013 row3
10      2/2/2013 row4

第三次迭代:

First column column1  row3 is  empty in first column so and  comparing column2  since 1 < 6 so no changes.

    1   1/2/2013 row1
2       1/3/2013 row2
    6   2/3/2013 row3
10      2/2/2013 row4

第四次迭代:

First column column1  row4 is there  so it comparing row2 and row4 for column3 date 1/3/2013 < 2/2/2013 so nothing.

    1   1/2/2013 row1
2       1/3/2013 row2
    6   2/3/2013 row3
10      2/2/2013 row4


Final Result After Sorting:

    1   1/2/2013 row1
2       1/3/2013 row2
    6   2/3/2013 row3
10      2/2/2013 row4

有没有在 PHP/mysql 中做这件事的好方法?

我尝试使用 php 排序功能无法找到解决方案。

谢谢你。

4

1 回答 1

1

感谢您提出一个有趣的问题。解决方案似乎是:

SELECT *,col1+col2 p FROM test ORDER BY p;

这适用于您在此小提琴中提供的测试数据:http ://www.sqlfiddle.com/#!2/3c7e2/4

仅当如您所说,只有一列具有值时,此答案才是正确的。

于 2013-06-24T07:52:07.803 回答