PHP - 循环A-Z使用动态链接对Mysql结果进行排序

时间:2013-02-03 01:53:08

标签: php mysql alphabetical

我在mysql中有以下表: -

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");

在我的页面上,我有一个A-Z锚点链接,它会显示一个新标签: -

    <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循环运行。< / p>

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

这甚至没有开始处理0-9选项卡,我认为这将是我目前的代码本身的一个问题。任何指针真的很感激。

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

1 个答案:

答案 0 :(得分:0)

虽然我不推荐您使用的方法,但如果您想保持它的简单,那么您需要在输入之前使用while提取所有的波段名称通过将foreach放入临时数组中来循环foreach,或者在任何输出发生之前更好。这将允许您在此数组上使用foreach()而不是while。您也可以按字母对这些数组进行排序,这样可以更简单地查看哪些字母带有以它开头的带

一些额外提示:

  • 使用range()代替for($i = ... )chr()进行信件列表
  • 为您的href值提供的不只是字母作为id(美学但肯定更好),例如letter-a letter-b等等
  • 如果您使用的是5000多条记录,那么我认为您应该在分页上以分页方式提供这些记录,而不是在一大页乐队中提供
  • 如果这些不会经常发生变化,那么您最好使用某种缓存系统来将数据库查询保持在最低限度
  • 如果你使用上面给出的逐字母方法,你可以使用count()功能将字母数字计数添加到字母列表中(甚至隐藏你没有字母的字母)