2013-02-03 29 views
0

排序Mysql的結果我已經在MySQL下表: -PHP - 循環AZ使用動態鏈接

id | bandname 
1 | a perfect circle 
2 | aerosmith 
3 | b.b king 
4 | cat stevens

我獲取所有的結果在一個查詢中使用: -

$result = mysql_query("SELECT id, bandname FROM bands ORDER BY bandname ASC"); 

在我的網頁我有這帶來了一個新的標籤AZ錨鏈接: -

<ul class="tabs-nav"> 
     <li class="active"><a href="#0">0-9</a></li> 
    <?php 
     // Print a-z link 
     for ($i=97; $i<=122; $i++) { 
     $curletter = chr($i); 
     echo '<li><a href="#'.$curletter.'" title="Band names beginning with letter '.$curletter.'" class="uppercase">'.$curletter.'</a></li>'; 
     } 
    ?> 
    </ul> 

我遇到了麻煩理解過程中列出的帶他們的標籤。目前,我的代碼是: -

<div class="tabs-container"> 
    <?php 
     // Print a-z tabs 
     for ($i=97; $i<=122; $i++) { 
     $curletter = chr($i); 
    ?> 
     <div class="tab-content" id="<?php echo $curletter; ?>"> 
      <?php 
      while($bands = mysql_fetch_array($result)) { 
       $bandname = $bands['bandname']; 
       $bandid = $bands['id']; 
       $bandletter = strtolower(substr($bandname , 0 , 1)); 
      } 
      if($curletter==$bandletter) { 
       echo '<a href="'.$bandid.'/" title="'.$bandname.'>'.$bandname.'</a>'; 
      } 
      ?> 
     </div> 
    <?php } ?> 
    </div> 

我知道這是不正確,因爲我打電話裏面的while循環的循環,只是看起來不正確,我 - 作爲AZ標籤創建過程的每一次迭代將不得不通過while循環。

如果我要處理5000條樂隊,最好的方法是什麼?一個sql結果會多次循環,每個波段的一個結果保存在一個字母數組中,或者每當用戶點擊其中一個錨鏈接時發出一個ajax sql查詢?

這甚至沒有開始處理0-9選項卡,我認爲這將是一個問題本身給我目前的代碼。任何指針真的會被讚賞。

...我已經尋找一個答案,但沒有發現類似的東西,以我的問題:)

+0

雖然我可以看到更好的解決方案循環問題你有(一個循環應該是足夠的),我肯定不會向瀏覽器發送5000個結果,這不會帶來非常愉快的瀏覽體驗。 – jeroen

回答

0

雖然我不建議你在所有使用,如果你想保持它,你有簡單的方法那麼你需要使用一段時間來提取所有的樂隊名稱,然後再通過將它們放入臨時數組中,或者在任何輸出發生之前更好地輸入名稱循環foreach。這將允許您在此數組上使用foreach()而不是while。你也可以給它們排序成字母排列也使得它更簡單,看看哪些字母具有與其

一些額外的技巧開始的樂隊:

  • 使用range()而不是爲字母上市的for($i = ...)chr()
  • 給您的href值多隻信作爲ID(審美但肯定更好),如letter-aletter-b
  • 如果你使用5000+的記錄,你應該在單獨的網頁上投放這些我意見與分頁,而不是在一大頁樂隊
  • 如果這些不會經常改變,你會最好使用某種緩存系統,以保持數據庫查詢最低
  • 如果您使用我已經給出了上面給出的按字母順序排列的方法,你可以使用count()函數將字符串數添加到字母列表中(甚至隱藏你沒有帶的字母)
+0

非常感謝。目前我只有3條記錄,但我計劃在未來擴展;) – Will