十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
sqlserver查询树形结构的所有子节点
创新互联是一家集网站建设,雷山企业网站建设,雷山品牌网站建设,网站定制,雷山网站建设报价,网络营销,网络优化,雷山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
用标准sql的with实现递归查询(sql2005以上肯定支持,sql2000不清楚是否支持):
with subqry(id,name,pid) as (
select id,name,pid from test1 where id = 5
union all
select test1.id,test1.name,test1.pid from test1,subqry
where test1.pid = subqry.id
)
select * from subqry;
jsp从mysql数据库读取数据,并填充到树形结构菜单并展现出来的实现方法:
1、引入jquery.treeview.js树控件
script type="text/javascript" src="jquery/easyui/jquery.min.js"/script
script type="text/javascript" src="jquery/easyui/jquery.easyui.min.js"/script
2、jsp页面中获取后台mysql数据,并传到jsp页面来
%
// 数据库的名字
String dbName = "zap";
// 登录数据库的用户名
String username = "sa";
// 登录数据库的密码
String password = "123";
// 数据库的IP地址,本机可以用 localhost 或者 127.0.0.1
String host = "127.0.0.1";
// 数据库的端口,一般不会修改,默认为1433
int port = 1433;
String connectionUrl = "jdbc:sqlserver://" + host + ":" + port + ";databaseName=" + dbName + ";user=" + username
+ ";password=" + password;
//
//声明需要使用的资源
// 数据库连接,记得用完了一定要关闭
Connection con = null;
// Statement 记得用完了一定要关闭
Statement stmt = null;
// 结果集,记得用完了一定要关闭
ResultSet rs = null;
try {
// 注册驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 获得一个数据库连接
con = DriverManager.getConnection(connectionUrl);
String SQL = "SELECT * from note";
// 创建查询
stmt = con.createStatement();
// 执行查询,拿到结果集
rs = stmt.executeQuery(SQL);
while (rs.next()) {
%
tr
3、填充树形菜单:
{
id : "string" // will be autogenerated if omitted
text : "string" // node text
icon : "string" // string for custom
state : {
opened : boolean // is the node open
disabled : boolean // is the node disabled
selected : boolean // is the node selected
},
children : [] // array of strings or objects
li_attr : {} // attributes for the generated LI node
a_attr : {} // attributes for the generated A node
}
$('#tree').jstree({
'core' : {
'data' : function (obj, cb) {
cb.call(this,
['Root 1', 'Root 2']);
}
}});
使用sqlserver递推查询,可以直接查询出来。
参考资料:
WITH lmenu(nav_id,nav_name,nav_parentid,level) as
(
SELECT nav_id,nav_name,nav_parentid,0 level FROM nav nav_parentid=0
UNION ALL
SELECT A.nav_id, A.nav_name,a.nav_parentid, b.level+1 FROM gs_nav A,lmenu b where a.nav_parentid= b.nav_id and nav_id = 10
)
SELECT * from lmenu
具体SQL语句还需要自己验证一下,上面的自己看着乱写的。