本日志标题:按歌手名拼音首字母进行排序        [2005-9-5]

这个东西还是老早老早和幻想曲老兄讨论过的

当时弄了一个例子,搞完了随手也就扔了-_-!

前些天蓝色经典论坛那一位朋友问起来,又突然想到了,不过我看到PM的时候,他已经自己搞定了

汗,怕遗忘,加来算篇日志:)

我当时的思路是:

1,目前暂以歌手的拼音首字母排序

2,数据库中输入的歌手名称,直接汉字(除了外国佬:),不带任何的首字母前缀

3,解决办法,用一函数(现成的),功能嘛就是提取一段字符串的首字母

[Ctrl+A 全部选择进行拷贝 提示:可先修改部分代码,再点击运行]

4,接着一个提取判断:如果需要首字母为L的,则提取出数据库中的歌手名,进行转换函数的附加,与约定的需要的字母L判断

我弄了个懒方法。


Function show(wchar)
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from mper"
rs.Open sql,conn,1,1

if rs.EOF and rs.BOF then
response.write ("暂时还没有记录")
else
Do Until rs.EOF
     if getpychar(rs("m_name"))=wchar then
response.write("歌手:"& rs("m_name"))
     end if
rs.MoveNext    
Loop
end if
end function



这个自定义函数,就是显示数据库中 某歌手拼音首字母 是 变量wchar对应的值(比如A,B,C,D……)show("L")就是首字母是L的:)

就这样,功能很快实现了,不过没有再优化,细化下去-_-!

我的操作步骤:

1,建立数据库cnvm.mdb

建立表 mper
建立字段 m_id:自动编号,主键
建立字段 m_name:文本,歌手名
建立字段 m_zj:文本,歌手专集或歌曲名

2,数据库连接文件conn.asp



<%
db_path = "cnvm.mdb"
Set conn= Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path)
conn.Open connstr
%>



3,库文件lib.asp,主要功能见上描述



<!--#include file="conn.asp" -->

<%
function getpychar(char)
tmp=65536+asc(char)
if(tmp>=45217 and tmp<=45252) then
getpychar= "A"
elseif(tmp>=45253 and tmp<=45760) then
getpychar= "B"
elseif(tmp>=45761 and tmp<=46317) then
getpychar= "C"
elseif(tmp>=46318 and tmp<=46825) then
getpychar= "D"
elseif(tmp>=46826 and tmp<=47009) then
getpychar= "E"
elseif(tmp>=47010 and tmp<=47296) then
getpychar= "F"
elseif(tmp>=47297 and tmp<=47613) then
getpychar= "G"
elseif(tmp>=47614 and tmp<=48118) then
getpychar= "H"
elseif(tmp>=48119 and tmp<=49061) then
getpychar= "J"
elseif(tmp>=49062 and tmp<=49323) then
getpychar= "K"
elseif(tmp>=49324 and tmp<=49895) then
getpychar= "L"
elseif(tmp>=49896 and tmp<=50370) then
getpychar= "M"
elseif(tmp>=50371 and tmp<=50613) then
getpychar= "N"
elseif(tmp>=50614 and tmp<=50621) then
getpychar= "O"
elseif(tmp>=50622 and tmp<=50905) then
getpychar= "P"
elseif(tmp>=50906 and tmp<=51386) then
getpychar= "Q"
elseif(tmp>=51387 and tmp<=51445) then
getpychar= "R"
elseif(tmp>=51446 and tmp<=52217) then
getpychar= "S"
elseif(tmp>=52218 and tmp<=52697) then
getpychar= "T"
elseif(tmp>=52698 and tmp<=52979) then
getpychar= "W"
elseif(tmp>=52980 and tmp<=53640) then
getpychar= "X"
elseif(tmp>=53689 and tmp<=54480) then
getpychar= "Y"
elseif(tmp>=54481 and tmp<=62289) then
getpychar= "Z"
else '如果不是中文,则不处理
getpychar=char
end if
end function
function getpy(str)
for i=1 to len(str)
getpy=getpy&getpychar(mid(str,i,1))
next
end function

Function show(wchar)
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from mper"
rs.Open sql,conn,1,1

if rs.EOF and rs.BOF then
response.write ("暂时还没有记录")
else
Do Until rs.EOF
     if getpychar(rs("m_name"))=wchar then
response.write("歌手:"& rs("m_name"))
response.write("&nbsp;歌名:"& rs("m_zj"))
response.write("<br>")
     end if
rs.MoveNext    
Loop
end if
rs.close
Set rs = Nothing
end function
%>



4,页面显示index.asp,没有多考虑,用了几个特例进行调试



<!--#include file="lib.asp" -->

<%
mchr=request.querystring("mchr")
if mchr="" then
%>
    D开头的<hr>
        <%=show("D")%><br>
    L开头的<hr>
        <%=show("L")%><br>
    Z开头的<hr>
        <%=show("Z")%>
<%else%>
    <%=mchr%>开头的<hr>
        <%=show(mchr)%>
<%end if%>

<%
for i = 65 to 90
response.write("<a href=index.asp?mchr="&chr(i)&">"&chr(i)&"</a>&nbsp;")
next
%>



页面调试地址:

http://cnbruce.com/test/music/

SO,上面算是我的回忆。再看这位朋友是如何解决的:

http://www.5do8.com/news.asp?id=193




[Edit on 2005-9-6 2:04:09 By cnbruce]

在百度搜索完整的按歌手名拼音首字母进行排序内容,或者用Google搜索相关的更多内容

By [cnbruce] at 18:07:14 | 评论 [14] | 浏览 [29463] | TrackBack| 返回顶部

About Comments
为什么要加65536?中文字符在 ANSI 字符代码里是从什么到什么的?
能不能说下思路?好象不太明白
By [xixi] at 2005-9-5 19:07:01
哈哈哈,狼哥给我拉客了。
By [老年] at 2005-9-5 21:34:58
acess字符串默认排序就是按照拼音排的啊?
By [刘东] at 2005-9-5 23:17:10
标题误导楼上了,现在的需求分析是:按照字母来找记录,不是单筛选排序/

to 老农,你那函数是解拼音函数,其实只要解首字母的函数就可以了

to 顶楼,函数非我写,相关资料 古狗ING
By [bruce] at 2005-9-6 1:55:33
TO:bruce
对的,Asc(t)返回第一个ascII码,可以根据这个就判断Z-A了

原先没有考虑大小写,哈哈,判断的时候Lcase()都变为小写的说。哈哈哈
By [老农] at 2005-9-6 2:48:44
老大,猪公子也在着急:)别只顾庆功阿
By [haibird] at 2005-9-7 16:23:12
你好,你有使用FLASH操作数据库内容的教程么??正在研究,头都昏!
By [wuyeah] at 2005-9-8 7:17:02
kj;lkl;
By [fdgh] at 2005-10-4 10:54:41
好东东.谢谢
By [GOTHIC] at 2005-10-4 10:55:49
这样的话,是不是所有的都能一下子搞定啊
By [美丽的日子] at 2005-10-10 16:02:52
把翻页用什么思路做出来啊 ???
By [美丽的日子] at 2005-10-11 14:03:33
用select case
By [mal] at 2006-4-4 14:09:35
中文的可以了那英文咋排序啊
By [chrysalis] at 2006-4-26 3:03:58
By [Jade] at 2006-9-5 10:42:30


Post a Comment
呢称: 验证码: 
禁止笑脸转换 禁止UBB | 缩放输入框:6 5 | [Ctrl+Enter提交](1000个字符限制)