PHP实现结果集的另类排序
前天去面试的时候,给我出了一个问题:使用PHP将结果集进行排序,首先输出ID最大的值,然后输出ID最小的值;再输入剩余结果集中ID最大的值,接着输出剩余结果集中ID最小的值,以此类推,一直循环下去。
说实话,当时确实把我难住了,一直以为用一句SQL语句就可以实现这个功能,但我确实不知道什么样的SQL语句可以实现这样的排序方法,我只知道升序和降序两种排序。不由觉的自己了解的太少,只是会一些基本的应用,一些很别调的要求就无法完成了。
当然,这就说明自己的水平还很次,还要努力学习!
这个问题没解决,心里实有些不甘心。于是晚上回到家后便开始琢磨起来:什么样的SQL语句才可以实现这种排序呢?无奈,只好请教芽雨兄了,芽雨给我的答案很明确:SQL几乎不可能实现,要使用数组来进行操作。接下来我便一些写代码测试,一边想解决方法,一边上网查找PHP对数组操作的函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php header("Content-Type:text/html; charset=utf-8"); //数据库连接代码省去 echo "<title>test</title>"; $rs = $conn->execute("select * from test order by id asc"); echo "结果按ID升序排序"; echo "<table border=\"1\"><tr><th align=\"center\" width=\"50\">ID</th><th align=\"center\" width=\"100\">title</th><tr>"; if(!$rs->EOF){ while(!$rs->EOF){ echo "<tr><td align=\"center\">".$rs->fields("id")."</td><td align=\"center\">".$rs->fields("title")."</td>"; $a[] = $rs->fields("id");//将ID值放到数组a中 $rs->movenext(); } } echo "</table><br />"; $rs->close(); while(count($a)>0){ $b[] = max($a);//将数组a中最大的值放到数组b中 $b[] = min($a);//将数组a中最小的值放到数组b中 array_pop($a);//删除数组a的最后一个元素 array_shift($a);//删除数组a的第一个元素 } $zhang = array_unique($b);//删除数组b中的重复值 echo "先取结果中ID值最大的,<br />然后取结果中ID值最小的,<br />一直循环"; echo "<table border=\"1\"><tr><th align=\"center\" width=\"50\">ID</th><th align=\"center\" width=\"100\">title</th><tr>"; foreach($zhang as $z){ $rs = $conn->execute("select * from test where id=".$z); if(!$rs->EOF){ echo "<tr><td align=\"center\">".$z."</td><td align=\"center\">".$rs->fields("title")."</td>"; } $rs->close(); } echo "</table>"; ?> |
执行结果如下:
终于算是完美的解决了,但不知道是否还有更简单的办法来实现?