2012-08-31 83 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個學生屬於同一個小組,而是要確定每個學生所屬的小組。

另外,請不要說排序,當你指的是羣體。