2013-02-26 59 views
1

我正在將組織列表填充到我的網站上的下拉列表中。這PHP很容易,我沒有問題。使用數據庫值填充下拉列表並拆分字母排序

但是,該列表可能會變得相當龐大,我想將列表分成三個按字母順序排列的部分。 (例如A-G,H-S,T-Z)。我如何修改我的代碼以適應用A-G排序第一個下拉列表(然後我可以將相同的邏輯應用於其他兩個)。

$sql = pg_query("SELECT name FROM institution ORDER BY name ASC");                 
    while($row = pg_fetch_array($sql)){ 
     echo "<option value=\"organisation1\">" .$row ['name'] . "</option>"; 
    } 
+1

在你做一段時間之前取出你的日期,並做一些處理,如子串來找到'name'的第一個字母,然後在A到G邏輯中找到條件(if)。否則H-S else T-Z。或者以一種非常奇怪的方式用SQL語句來執行SQL語句中的邏輯。 – ChelseaStats 2013-02-26 10:44:34

回答

0
$sql = pg_query(" 
    select name 
    from institution 
    where name < 'H' 
    order by name asc 
"); 

$sql = pg_query(" 
    select name 
    from institution 
    where name >= 'H' and name < 'T' 
    order by name asc 
"); 

$sql = pg_query(" 
    select name 
    from institution 
    where name >= 'T' 
    order by name asc 
"); 
+0

完美謝謝你。沒有意識到SQL提供了一個<>運算符函數。 – WebDevDanno 2013-02-26 11:41:06

0

這應該做A-G和H-S

$AG = $HS = ''; 
$sql = pg_query("SELECT name FROM institution ORDER BY name ASC");                 
while($row = pg_fetch_array($sql)){ 
    $char =chr(strtoupper(substr($row ['name'],0,1))); 
    if($char<=71){ 
     $AG .= "<option value=\"organisation1\">" .$row ['name'] . "</option>"; 
    } 
    if(($char>71) && ($char <= 83)){ 
     $HS .= "<option value=\"organisation1\">" .$row ['name'] . "</option>"; 
    } 
    } 
    echo $AG.$HS; 

使用CHR的手段來得到的第1個字符的ASCII值。創建條件將字符串添加到您的子部分。你可以看看ASCII瓦爾斯在這裏:
http://www.asciitable.com/

+0

我可以看到你的代碼和我的背後的邏輯,如果應該工作,但它似乎沒有工作?我剛剛在第一個選擇框/下拉列表中加入了AG條件,並忽略了與$ HS有關的任何事情。任何想法,爲什麼它不工作?如果需要,我可以在頁面上提供我的代碼。 – WebDevDanno 2013-02-26 11:37:10

+0

$ AG如何看?它應該只包含select的數據部分,你仍然需要在它周圍包裝一個'