有没有更好的方法按字母顺序列出所有数据库术语?

时间:2016-10-31 作者:scott

我有一个wordpress网站(仍在本地主机上开发中,很抱歉,我无法提供链接),提供六年级常见数学概念的定义和解释。网站的主要部分是概念图或web,但我的老板还希望我们提供按字母顺序浏览术语的功能,如字典或索引。

因此,她想要的东西通常可以在网络上找到:所有以A开头的术语都列在“A”下,所有以B开头的术语都列在“B”下,等等。我可以从数据库中检索所有术语并对它们进行排序,但我不确定显示它们的最佳方式。

示例:网页应如下所示:

一头公牛;苹果公司;洋蓟;鳄梨;香蕉;蓝莓等。

我想我可以构建HTML框架,并在每个字母的div中查询数据库中以该字母开头的所有术语。这样(在psuedocode中):

<div id=\'a-section\'>
<?php $terms=$wpdb->get_results("all terms that start with A");
      foreach( $terms as $term ) {  ?>
          <a link-to-definition><?php echo $term ?></a>
      <?php } ?>
</div>
<div id=\'b-section\'>
  ....
为此,我需要对数据库进行26次查询,因此我认为这种方法效率相当低。我能做得更好吗?如果我在一个查询中检索所有术语,按字母顺序排序,然后查看每个术语的第一个字母,会怎么样?这样行吗?似乎是while( "a" == first-letter-of-$term ) 可能无法在foreach( $results as $term ), 因为foreach循环对于每个$术语只执行一次。但我真的不想写26(实际上是27,因为有些术语以数字开头)if( "a" == first-letter-of-$term ) foreach循环内的语句。

我希望我已经清楚地解释了这个困境。有人能建议我该怎么做吗?我认为有人做过类似的事情,但谷歌没有帮我找到任何答案。提前谢谢。

1 个回复
最合适的回答,由SO网友:scott 整理而成

来自@Czersplace的评论让我走上了做我需要的事情的正确轨道。由于前几个术语是以数字开头的,因此我就是这样实现我的解决方案的:

// get results from $wpdb in object called $links
$glossary_ltr = "999";
foreach( $links as $link ) {
    $kw_ltr = substr( $link->keyword, 0, 1 ); // get first letter
    if( $glossary_ltr != $kw_ltr ) { 
        if( $kw_ltr > $glossary_ltr ) {
            // code to transition to new letter
            $glossary_ltr = $kw_ltr;
        }
    } // if letters are different
    // print out term
    echo "<a onclick=\'openTerm(/* term data */)\'>". $link->keyword . "</a><br>";
} // foreach
希望这对其他人有帮助!

相关推荐

WordPress Custom Post Loop

我正在尝试循环浏览自定义WordPress帖子,遇到了一个问题,比如我添加了自定义字段并想在中显示它<li> 使用循环。我成功地完成了操作,但数据/链接/类别正在重复,如果类别与以下内容相同,我希望只显示一次:如果我有2篇带有data1类别的帖子,那么链接将只显示data1once 但我有2个不同类别的帖子,然后它会分别显示每个帖子。Sample Code:<ul class="filter filter-top"> <li cla