2013-02-03 28 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