project表(项目基本信息)id project_name
1 项目1
2 项目2
item表(条目基本信息)id item_name
1 Item1
2 Item2
project_item表(记录项目中包含的条目,一个项目中包含多个条目。)id item_id project_id
1 1 1
2 2 1
3 2 2
project_item_file表
(记录项目条目中包含的文件,其中item_id是project_item表中的id,parent_id是本表的id)
一个项目条目下包含多个文件,可能有文件夹id item_id file_name parent_id is_folder
1 1 xxx.doc 0 0
2 1 zzz.xls 0 0
3 2 fff.txt 4 0
4 2 文件夹1 0 1
5 3 rrr.txt 0 0
需要用一条sql语句查询出某个项目中包含的所有文件,并且按照条目/文件夹(如果有)/文件名的格式显示。
比如查询项目1(按id查询):
Item1/xxx.doc
Item1/zzz.xls
Item1/文件夹1/fff.txt
mysqlsql数据库查询
1 项目1
2 项目2
item表(条目基本信息)id item_name
1 Item1
2 Item2
project_item表(记录项目中包含的条目,一个项目中包含多个条目。)id item_id project_id
1 1 1
2 2 1
3 2 2
project_item_file表
(记录项目条目中包含的文件,其中item_id是project_item表中的id,parent_id是本表的id)
一个项目条目下包含多个文件,可能有文件夹id item_id file_name parent_id is_folder
1 1 xxx.doc 0 0
2 1 zzz.xls 0 0
3 2 fff.txt 4 0
4 2 文件夹1 0 1
5 3 rrr.txt 0 0
需要用一条sql语句查询出某个项目中包含的所有文件,并且按照条目/文件夹(如果有)/文件名的格式显示。
比如查询项目1(按id查询):
Item1/xxx.doc
Item1/zzz.xls
Item1/文件夹1/fff.txt
mysqlsql数据库查询
解决方案 »
- 一直不明白的问题,怎么设置MYSQL的数据库目录存放在不同的目录或不同的分区下
- MYSQL 竟然 溢出了 第一次发现 呵呵
- 求一个mysql函数的写法
- 求教EMS SQL Manager Lite for Mysql
- 如何知道当前那个语句正在锁表?
- 分时间段统计数据,空值自动填充
- mysql有个字段是DATETIME类型,我可以按月统计么,该怎么写sql语句?
- 用mysqlfront登陆mysql时出现:2013 Lost connection to MYSQL server during query(在线给分)
- BI工具有哪些?其中微软BI的优势有哪些?
- mysql字符串拼接,拼接的结果过长被截取了。。。
- mysql update where 如果空列,能不能update?
- 对于递归关系的表,如何做到级联更新
insert into #project
select 1,'项目1'
union all select 2,'项目2'create table #item(id int,item_name varchar(100))
insert into #item
select 1,'Item1'
union all select 2,'Item2'create table #project_item(id int,item_id int,project_id int)
insert into #project_item
select 1,1,1
union all select 2,2,1
union all select 3,2,2create table #project_item_file(id int,item_id int,[file_name] varchar(50),parent_id int,is_folder int)
insert into #project_item_file
select 1,1,'xxx.doc',0,0
union all select 2,1,'zzz.xls',0,0
union all select 3,2,'fff.txt',4,0
union all select 4,2,'文件夹',0,1
union all select 5,3,'rrr.txt',0,0
go
select b.project_name,c.file_name
from #project_item a
left join #project b on a.project_id=b.id
inner join #project_item_file c on a.item_id=c.item_id
order by b.project_namedrop table #project,#item,#project_item,#project_item_file/*
project_name file_name
------------------------------------
项目1 xxx.doc
项目1 zzz.xls
项目1 fff.txt
项目1 文件夹
项目2 文件夹
项目2 fff.txt
*/
insert into #project
select 1,'项目1'
union all select 2,'项目2'create table #item(id int,item_name varchar(100))
insert into #item
select 1,'Item1'
union all select 2,'Item2'create table #project_item(id int,item_id int,project_id int)
insert into #project_item
select 1,1,1
union all select 2,2,1
union all select 3,2,2create table #project_item_file(id int,item_id int,[file_name] varchar(50),parent_id int,is_folder int)
insert into #project_item_file
select 1,1,'xxx.doc',0,0
union all select 2,1,'zzz.xls',0,0
union all select 3,2,'fff.txt',4,0
union all select 4,2,'文件夹1',0,1
union all select 5,3,'rrr.txt',0,0
go
--select b.item_name,d.file_name,c.file_name,
select fpath=b.item_name+case when isnull(d.file_name,'')='' then '' else '/'+d.file_name end+'/'+c.file_name
from #project_item a
left join #item b on a.item_id=b.id
left join #project_item_file c on a.item_id=c.item_id
left join #project_item_file d on c.parent_id=d.id
where c.is_folder=0
order by b.item_namedrop table #project,#item,#project_item,#project_item_file/*
fpath
------------------
Item1/xxx.doc
Item1/zzz.xls
Item2/文件夹1/fff.txt
Item2/文件夹1/fff.txt
*/
insert into #project
select 1,'项目1'
union all select 2,'项目2'create table #item(id int,item_name varchar(100))
insert into #item
select 1,'Item1'
union all select 2,'Item2'create table #project_item(id int,item_id int,project_id int)
insert into #project_item
select 1,1,1
union all select 2,2,1
union all select 3,2,2create table #project_item_file(id int,item_id int,[file_name] varchar(50),parent_id int,is_folder int)
insert into #project_item_file
select 1,1,'xxx.doc',0,0
union all select 2,1,'zzz.xls',0,0
union all select 3,2,'fff.txt',4,0
union all select 4,2,'文件夹1',0,1
union all select 5,3,'rrr.txt',0,0
go
--select b.item_name,d.file_name,c.file_name,
select distinct fpath=b.item_name+case when isnull(d.file_name,'')='' then '' else '/'+d.file_name end+'/'+c.file_name
from #project_item a
left join #item b on a.item_id=b.id
left join #project_item_file c on a.item_id=c.item_id
left join #project_item_file d on c.parent_id=d.id
where c.is_folder=0
drop table #project,#item,#project_item,#project_item_file/*
fpath
------------------
Item1/xxx.doc
Item1/zzz.xls
Item2/文件夹1/fff.txt
*/
相当坑爹,等于从北京去上海不可以走飞机、动车和高速,辛苦!
select fpath=b.item_name+case when isnull(d.file_name,'')='' then '' else '/'+d.file_name end+'/'+c.file_name
from #project_item a
left join #item b on a.item_id=b.id
left join #project_item_file c on a.id=c.item_id
left join #project_item_file d on c.parent_id=d.id
where c.is_folder=0
order by b.item_name