2012-08-31 84 views
0

确定这里就是我想要做的:复杂的排序PHP

我不想在我的SQL查询进行排序

学生的地址我的数据库的模式如下分享:

CITY(强制)| AREA(强制性)| ROAD(可选)| BUILDING_NAME(可选)

我想排序(组)学生

  1. 城市,
  2. 地区,城市排序中(组)的学生,排序withing区(组)级学生
  3. ROAD,注意2个城市为具有相同道路名称的可能性,秀...

这是我迄今为止所做的:

我已经设法按城市对学生进行排序(组),(这是一个对象$学生,其所有信息不仅包含地址,还包含所有相关信息给学生,不按城市名称排序),现在我想组属于city.How内同一地区,同一条路的学生在全市范围内我可以我达到这个

我希望我已经解释清楚它

示例:

NAME   CITY   AREA  ROAD  BUILDING NAME 

  1. > 1. demo_student纽约四个方形市区海雾

    1. 样品纽约zzpq zzar德尼
    2. 检查孟买领主毫克道路ABC
    3. 你好孟买安泰里的一些demo
    4. 萨米孟买班德拉ABC LL

    OUTPUT

NAME   CITY   AREA  ROAD  BUILDING NAME 

  1. > 1。demo_student纽约四个方形市区海雾

    1. 样品纽约zzpq zzar德尼
    2. 你好孟买安泰里的一些demo
    3. 萨米孟买班德拉ABC LL
    4. 检查孟买领主毫克道路ABC

+1

你应该真的重新考虑SQL中的排序。 – njzk2

+0

你应该使用sql:order by。这正是你想要的速度比你在php – Asciiom

+0

中做得快得多,关于这些结果的一些例子会有帮助 – amd

回答

2

这听起来像是的一项工作,也是一个自定义函数,用于比较两行并计算出哪一行先行。你可以写得很复杂,只要你喜欢。

<?php 
function cmp($a, $b) 
{ 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
} 

$a = array(3, 2, 5, 6, 1); 

usort($a, "cmp"); 

foreach ($a as $key => $value) { 
    echo "$key: $value\n"; 
} 
?> 

The above example will output: 

0: 1 
1: 2 
2: 3 
3: 5 
4: 6 

现在,为避免这种情况,为了上帝的缘故,请忽略此答案并在SQL查询中执行此操作。它会比PHP更快,消耗更少的资源,并且更容易更新,如果你想改变顺序的话。

+0

所采用的层次结构,意识到它会更高效在mysql上做,谢谢 –

0

通常情况下,这是使用地图列表的>

实施将会对潜在的会员(学生)可能环和它们分派到适当的列表来完成。地图可以随时填入群组,或者如果您知道所有群组,则可以预先填充该地图。

这个想法并不是要确定2个学生属于同一个小组,而是要确定每个学生所属的小组。

另外,请不要说排序,当你指的是群体。