我目前正在努力寻找知道如何做到这一点的人?我已经尝试了一些不同的方法,结果是中途结果,但不是我想要的.基本上我正在尝试创建一个显示所有AZ波段的列表,但是从数据库中调用波段名称,因此我必须在嵌套列表中使用#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>
Run Code Online (Sandbox Code Playgroud)
我认为你想要的只是输出以该字母开头的第一个乐队的字母.实现此目的的一种方法是稍微更改您的查询(注意我在这里使用我认为的SQL-92语法,但是可能有更好的方法来获取特定数据库中的第一个字母):
select
band_name,
SUBSTRING(band_name from 1 for 1) AS first_letter
from
bands
order by
band_name
Run Code Online (Sandbox Code Playgroud)
这将为您提供查询中的第一个字母.
如果要将所有带有数字首字母的波段组合在一起,则可以使用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
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用该额外列以及cfoutput的group属性来帮助您获得所需的输出.
<UL>
<cfoutput query="bandNameList" group="first_letter">
<LI> #first_letter#
<UL>
<cfoutput>
<LI> #band_name# </LI>
</cfoutput>
</UL>
</LI>
</cfoutput>
</UL>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |