发布一个无限级别分类算法

sfply sfply 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
由于目前在做库存管理系统,因此不可避免地遇到如“主材-电子材料-二极管-发光二极管”这类无限分类的问题。

由于没有时间去参考前辈们的做法,就自己写了一个,请高人不吝赐教.

数据库Class
ID 自动编号
ClassID 分类编号(必须唯一,建议采用1001-100101-10010101..这种直观的方法编号)
ClassName 分类名称
FatherID 父分类ID,一级分类为0

1、取得数据结构

i = 0
set rs = conn.execute("select * from Class order by ClassID")
if not rs.eof and not rs.bof then
do while not rs.eof and not rs.bof
i = i + 1
MyClassArray = MyClassArray & "|" & rs("ID") & "," & rs("WH_ClassName") & "," & rs("WH_ClassFather") & "," & rs("WH_ID")
rs.movenext
loop
end if
ArrayMyClass = split(MyClassArray,"|")

以上这个SQL将所有分类信息放在一个字符串中,以后就不需要再查询数据库了,因此可以考虑放在Application中,就可以免读数据库了

2、无限追溯父路径
比如,主材-电子材料-二极管-发光二极管
我目前所处在的位置是“发光二极管”,那么怎么把前面的所有父级别类别都显示并能够连接过去呢?

参数是?classid=

Private Function GetClass(id,urlstring) '无限分类列
for i = 0 to ubound(ArrayMyClass)
if ArrayMyClass(i) <> "" then
if split(ArrayMyClass(i),",")(0) = id then
if split(ArrayMyClass(i),",")(2) <> 0 then '这里控制如果追溯到一级分类了就不再调用嵌套调用过程了
GetClass = GetClass(split(ArrayMyClass(i),",")(2),"> <a href=?ClassID="&split(ArrayMyClass(i),",")(0)&">"&split(ArrayMyClass(i),",")(1)&"</a> "&urlstring)
else
GetClass = "> <a href=?ClassID="&split(ArrayMyClass(i),",")(0)&">"&split(ArrayMyClass(i),",")(1)&"</a> "&urlstring
end if
end if
end if
next
End function

response.write GetClass(request("ClassID"),"")
这里request("ClassID")是当前的分类ID,GetClass要两个参数,第一个是当前ID,第二个用于保存历史父路径信息

index.asp?classid=13 得到的执行结果是(HTML形式)
<a href=?ClassID=1>主材</a> > <a href=?ClassID=7>电子材料</a> > <a href=?ClassID=10>二极管</a> > <a href=?ClassID=13>发光二极管</a>

3、增加新分类
使用思想是和上面一样的
得到的形式是结果是这样的(HTML形式)
<select size="1" name="FatherID">
<option value=1>主材[1001]</option>
<option value=7>主材-电子材料[100101]</option>
<option value=10>主材-电子材料-二极管[10010101]</option>
<option value=13>主材-电子材料-二极管-发光二极管[1001010101]</option>
<option value=11>主材-电子材料-三极管[10010102]</option>
<option value=12>主材-电子材料-电阻[10010103]</option>
<option value=8>主材-塑料制品[100102]</option>
<option value=14>主材-塑料制品-塑胶材料[10010201]</option>
<option value=9>主材-金属材料[100103]</option>
<option value=2>辅料[1002]</option>
<option value=3>半成品[1003]</option>
<option value=4>成品[1004]</option>
<option value=5>工具设备[1005]</option>
<option value=6>其他[1006]</option>
</select>

这样排序井然,都得助于分类编号的标准,因为SQL是用分类排序的:)

过程代码
Private Function GetClassName(id,urlstring) '无限分类树
for i = 0 to ubound(ArrayMyClass)
if ArrayMyClass(i) <> "" then
if split(ArrayMyClass(i),",")(0) = id then
if split(ArrayMyClass(i),",")(2) <> 0 then
GetClassName = GetClassName(split(ArrayMyClass(i),",")(2),trim("-"&split(ArrayMyClass(i),",")(1))&urlstring)
else
GetClassName = trim(split(ArrayMyClass(i),",")(1))&urlstring
end if
end if
end if
next
End function
调用
<select size="1" name="FatherID">
<%
for j = 0 to ubound(ArrayMyClass)
if ArrayMyClass(j) <> "" then response.write "<option value="&split(ArrayMyClass(j),",")(0)&">"&GetClassName(split(ArrayMyClass(j),",")(0),"")&"["&split(ArrayMyClass(j),",")(3)&"]</option>"&vbCrLf
next
%>
</select>
...全文

相关推荐

蓝雨新闻发布与管理系统设计

为了满足特定的业务需求,富文本编辑器往往需要进行一定程度的定制化开发。例如,对于新闻系统,可能需要添加或修改编辑器中的按钮,或调整编辑器对特定HTML标签的支持。这需要我们深入理解编辑器的API,并结合业务需求进行代码层面的定制。// 添加自定义插件。

Compass宁

肺炎分类实战案例 从 Kaggle 赛题到医学影像分类落地流程

这道 Kaggle 赛题聚焦肺炎相关影像的三分类预测,任务形式简洁,但非常适合拆解医学影像分类项目的核心流程。赛题要求围绕固定标签体系完成训练、验证与提交,重点不在复杂规则,而在于能否把数据理解、标签编码、模型训练和结果导出串成稳定闭环。

Mr数据杨

密码学基础(四)算法的安全性

区块链兄弟社区,区块链技术专业问答先行者,中国区块链技术爱好者聚集地作者:于中阳来源:区块链兄弟原文链接:http://www.blockchainbrother.com/article/83著权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。算法的安全性根据被破译的难易程度,不同的密码算法具有不同的安全等级。如果破译算法的代价大于加密数据的价值,那么一般不会有人想去破译它,即你可能...

区块链兄弟

UE4体素地形插件:无限世界生成与动态编辑技术解析

体素(Voxel)作为三维空间中的体积像素单元,是构建程序化生成世界的核心数据结构。其原理在于将连续空间离散化为均匀网格,通过对每个网格单元的属性(如密度、材质)进行定义和操作,实现地形的数学化描述。这项技术的工程价值在于突破了传统网格模型在规模与细节上的限制,支持近乎无限大的场景和实时动态修改,为高度交互的虚拟环境提供了底层支持。在游戏开发、模拟仿真和数字孪生等应用场景中,体素技术是实现可破坏地形、实时地貌编辑和超大规模场景的关键。本文聚焦的UE4VoxelTerrain插件,正是将这一套**数据驱动**

半张老头

Android MQTT开发实战:Paho库Pub/Sub模式与QoS级别深度解析

消息传递是分布式系统与物联网应用的核心基础,其本质在于实现不同组件间的可靠数据交换。发布/订阅模式通过解耦消息生产者与消费者,提供了高扩展性的异步通信机制,而服务质量级别则定义了消息传递的可靠性保证。在移动开发领域,合理运用这些技术能显著提升应用的实时性、稳定性和能效表现。MQTT作为轻量级消息协议,凭借其低功耗、低带宽特性,已成为物联网和移动端消息推送的主流选择。本文聚焦Android平台,以Eclipse Paho库为实践载体,深入剖析发布/订阅模式的设计原理与三种QoS级别的适用场景,帮助开发者构建高

weixin_30800807
评论 17
收藏 已收藏
分享
返回顶部
sfply
ASP 28,401 成员 356,940 内容