创建按字母顺序索引的列表 (ColdFusion + Microsoft SQL Server)

2024-01-04

我目前正在努力寻找知道如何做到这一点的人?我尝试了几种不同的方法,最终得到了一半的结果,但并不完全是我想要的。基本上我正在尝试创建一个显示所有乐队 A-Z 的列表,但乐队名称是从数据库中调用的,所以我必须在嵌套列表中使用#band_name#。如果我重新编写代码并发布它,有人可能会看到我哪里出错了。

<cfoutput query="bandNameList">
  <cfloop from="65" to="90" index="i">
    <UL>
     <LI> #chr(i)#
       <UL>
         <LI> #band_name# </LI>
       </UL>
     </LI>
    </UL>
  </cfloop>
</cfoutput>

我认为您所追求的是仅输出以该字母开头的第一个带的字母。 实现此目的的一种方法是稍微更改您的查询(请注意,我在这里使用的是 SQL-92 语法,但可能有更好的方法来获取特定数据库中的第一个字母):

select 
  band_name, 
  SUBSTRING(band_name from 1 for 1) AS first_letter
from 
  bands 
order by 
  band_name

这将为您提供查询中的第一个字母。

如果您想将所有首字母为数字的带区分组在一起,那么您可以使用 SQL 的 CASE 语句来执行此操作(您可能需要在 DBMS 中找到与 ascii() 等效的语句)。如果更容易的话,您还可以反转逻辑并与“正常”字母进行匹配,并将其他所有内容归入“0-9 和标点符号”类别中。我认为这就是许多音乐系统所做的(我想到的是 iPhone 上的 iTunes,但我确信还有其他系统)

select 
  band_name, 
  CASE  
    WHEN ascii(left(band_name, 1)) BETWEEN 48 AND 57 THEN '0-9'
    ELSE left(band_name, 1)
  END AS first_letter   
from 
  bands 
order by 
  band_name

现在,您可以使用该额外列以及 cfoutput 的 group 属性来帮助获得您想要的输出。

<UL>
<cfoutput query="bandNameList" group="first_letter">
     <LI> #first_letter#
     <UL>
       <cfoutput>             
           <LI> #band_name# </LI>             
       </cfoutput>
       </UL>
     </LI>        
</cfoutput>
</UL>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建按字母顺序索引的列表 (ColdFusion + Microsoft SQL Server) 的相关文章

随机推荐