0

我在mysql中有下表: -

编号 | 乐队名
1 | 一个完美的圆圈
2 | 航空史密斯
3 | bb王
4 | 猫史蒂文斯

我在一个查询中获取所有结果:-

$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>

我知道这是不正确的,因为我在 for 循环中调用了 while 循环,这对我来说似乎不正确——因为 AZ 选项卡创建过程的每次迭代都必须通过 while 循环。

如果我要处理 5,000 个乐队,那么最好的方法是什么?一个 sql 结果循环多次,每个波段的一个结果然后保存在一个字母数组中,或者每当用户单击其中一个锚链接时,一个 ajax sql 查询?

这些甚至都没有开始处理 0-9 选项卡,我认为考虑到我当前的代码,这本身就是一个问题。任何指针真的将不胜感激。

我已经搜索了答案,但没有找到与我的问题类似的东西:)

4

1 回答 1

0

虽然我根本不推荐您使用的方法,但如果您想保持它尽可能简单,那么您需要使用 while 提取所有乐队名称,然后再输入名称循环 foreach 通过将它们放入一个临时数组,或者在任何输出发生之前更好。这将允许您foreach()在此数组上使用而不是 while。您也可以按字母将它们排序到数组中,以便更轻松地查看哪些字母具有以它开头的带

一些额外的提示:

  • 使用range()代替for($i = ... )andchr()用于字母列表
  • 给你的 href 值不仅仅是作为 id 的字母(美观但肯定更好)letter-a letter-b,诸如此类
  • 如果您使用 5000 多条记录,我认为您应该在单独的页面上使用分页而不是在一大页乐队上提供这些记录
  • 如果这些不会经常更改,您最好使用某种缓存系统将数据库查询降至最低
  • 如果您使用我上面给出的按字母排列的方法,您可以使用count()函数将带编号计数添加到字母列表中(甚至隐藏您没有带的字母)
于 2013-02-03T02:37:57.603 回答