|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
mysql使用内部操作字符集gbk来进行操作,即执行"SELECT*FROMtestWHEREname=xxxor1=1/*LIMIT1";从而注入成功存储历程|成绩
只触及到一个表:xkb_treeNode
表布局是如许:
node_idint//节点id
parentNode_idint//父节点id
node_textvarchar//节点内容
isModulebit//是不是叶子节点
如今保留的数占有:
node_idparentNode_idnode_textisModule
1-1言语与文学0
2-1数学0
3-1手艺0
41语文0
51外语0
65英语0
76初中英语0
87特斯塔1
94测定是21
102测试31
如今成绩是:
可否经由过程做一个存储历程,
依据表中的isModule字段的取值(取值为1的暗示终极叶子结点),
好比“特斯塔”为叶子节点,层层向上递进找到”特斯塔“的先人节点:
特斯塔-〉初中英语-〉英语-〉外语-〉言语与文学
即经由过程”特斯塔“找到”言语与文学“来
终极前往的形状为:
叶子节点id父节点id节点称号先人节点称号先人节点id
87特斯塔言语与文学1
94测定是2言语与文学1
102测试3数学2
/////////////////////////////////////////////////////////////////////////
准确谜底:
--天生测试数据
createtablexkb_treeNode(
node_idint,
parentNode_idint,
node_textvarchar(10),
isModulebit)
insertintoxkb_treeNodeselect1,-1,言语与文学,0
insertintoxkb_treeNodeselect2,-1,数学,0
insertintoxkb_treeNodeselect3,-1,手艺,0
insertintoxkb_treeNodeselect4,1,语文,0
insertintoxkb_treeNodeselect5,1,外语,0
insertintoxkb_treeNodeselect6,5,英语,0
insertintoxkb_treeNodeselect7,6,初中英语,0
insertintoxkb_treeNodeselect8,7,特斯塔,1
insertintoxkb_treeNodeselect9,4,测定是2,1
insertintoxkb_treeNodeselect10,2,测试3,1
--创立存储历程
createproceduresp_test
as
begin
select
a.node_id,
a.parentNode_id,
a.node_text,
b.node_idasancestor_id,
b.node_textasancestor_text
into
#t
from
xkb_treeNodea,xkb_treeNodeb
where
a.parentNode_id=b.node_idanda.isModule=1
while(exists(select1fromxkb_treeNodea,#tbwherea.node_id=ancestor_idanda.parentNode_id!=-1))
begin
update#t
set
ancestor_id=b.p_id,
ancestor_text=b.p_text
from
#ta,
(select
c.node_id,
d.node_idasp_id,
d.node_textasp_text
from
xkb_treeNodec,xkb_treeNoded
where
c.parentNode_id=d.node_id)b
where
a.ancestor_id=b.node_id
end
select*from#torderbynode_id
end
--实行存储历程,了局楼主本人看
execsp_test
对于update操作,event中依次记录旧行,新行的值。 |
|