首页 新闻 会员 周边 捐助

MYSQL XML类型的字符串获取节点问题

0
悬赏园豆:40 [待解决问题]

MYSQL数据库X里str字段存储了下面的XML字符串,格式如下

<agencyOrg>
<comCode />
<businessOffice>
<row>
<nodeLevel>5</nodeLevel>
<id>5</id>
<orgCode>orgCode5</orgCode>
</row>
<row>
<nodeLevel>4</nodeLevel>
<id>4</id>
<orgCode>orgCode4</orgCode>
</row>
<row>
<nodeLevel>3</nodeLevel>
<id>3</id>
<orgCode>orgCode3</orgCode>
</row>
<row>
<nodeLevel>2</nodeLevel>
<id>2</id>
<orgCode>orgCode2</orgCode>
</row>
<row>
<nodeLevel>1</nodeLevel>
<id>1</id>
<orgCode>orgCode1</orgCode>
</row>
</businessOffice>
</agencyOrg>

 

我想实现两个结果,

1.按照nodeLevel顺序从1至5拼装orgCode

实现效果为orgCode1_orgCode2_orgCode3_orgCode4_orgCode5

2.查找nodeLevel为2所对应的orgCode2

 

按照目前只能获取全部的orgCode

select  extractValue(str,'/agencyOrg/businessOffice/row/orgCode')orgCode from x

 

结果是:orgCode5_orgCode4_orgCode3_orgCode2_orgCode1

 

是按照目前的字段顺序一一列出的

 

 

麻烦 大神进行指导,谢谢

 

没园豆了,不好意思

御风苍狼的主页 御风苍狼 | 初学一级 | 园豆:162
提问于:2014-07-20 17:42
< >
分享
所有回答(2)
0

select  extractValue(a.str,'/agencyOrg/businessOffice/row/')orgCode from

 (select str,extractValue(str,'/agencyOrg/businessOffice/row/')nodeLevel as nodeLevel form x order by nodeLevel asc) as a

Launcher | 园豆:45050 (高人七级) | 2014-07-21 10:05

谢谢你的回复,抱歉我写的应该是select  extractValue(str,'/agencyOrg/businessOffice/row/orgCode')orgCode from x

 

这个是一个字段,其内部是无法排序的,两个结果主要是如何按照nodeLevel 的层级来取值,

按照你的写法sql无法执行,nodeLevel 作为别名只能用在外面的排序

 

 

支持(0) 反对(0) 御风苍狼 | 园豆:162 (初学一级) | 2014-07-22 09:12

@御风苍狼: 

select  extractValue(a.str,'/agencyOrg/businessOffice/row/orgCode') orgCode from

 (select str,extractValue(str,'/agencyOrg/businessOffice/row/nodeLevel') nodeLevel form x order by nodeLevel asc) as a

 

我既不会 sql,也不会 xml query,我就是看你的语法,先用你的 nodeLevel 排序,要排序,首先得从 xml 选出 nodeLevel,然后我看了你的语句,又分析了下 nodeLevel 同 orgCode 具有相似特征,所以就照着你的语句写了个按照 nodeLevel 将查询出的 str 排序的语句,然后从这个查询的结果集中,再去用你的语句查询 orgCode。

语法可能有错误,我想你比我更懂 sql 吧(居然还会 xml query!),你自己稍微改改吧!反正我就这么个思路,我觉得解题的思路没啥问题,即使放到 LINQ 中它也是正确的。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2014-07-22 09:23

@Launcher:

order排序是针对多个字段进行排序,目前extractValue(str,'/agencyOrg/businessOffice/row/nodeLevel') 是一个字段,是要处理这个字段内部的事情,与其他字段无关

支持(0) 反对(0) 御风苍狼 | 园豆:162 (初学一级) | 2014-07-22 16:01

@御风苍狼: 你要的是这个:http://msdn.microsoft.com/zh-cn/library/ms190945.aspx

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2014-07-22 16:11
0

加上排序就O了吧,1L正解

Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-07-21 10:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册