我目前正在努力寻找知道如何做到这一点的人?我尝试了几种不同的方法,最终得到了一半的结果,但并不完全是我想要的。基本上我正在尝试创建一个显示所有乐队 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(使用前将#替换为@)