① sql里樹狀結構的表,找樹葉節點。
找樹葉簡單啊
SELECT
*
FROM
表 main
WHERE
NOT EXISTS (
SELECT * FROM 表 sub WHERE main.ID = sub.ParentID
)
也就是對於 表的 每一行, 不存在有其他行的數據, ParentID 等於 當前行的 ID
② php:樹形結構的演算法
產品分類,多級的樹狀結構的論壇,郵件列表等許多地方我們都會遇到這樣的問題:如何存儲多級結構的數據?
在PHP的應用中,提供後台數據存儲的通常是關系型資料庫,它能夠保存大量的數據,提供高效的數據檢索和更新服務。然而關系型數據的基本形式是縱橫交錯的表,是一個平面的結構,如果要將多級樹螞耐消狀結構存儲在關系型資料庫里就需要進行合理的翻譯工作。接下來我會將自己的所見所聞和一些實用的經驗和大家探討一下。
層級結構的數據保存在平面的資料庫中基本上有兩種悶知常用設計方法:
毗鄰目錄模式(adjacency list model)
預排序遍歷樹演算法(modified preorder tree traversal algorithm)
我不是計算機專業的,也沒有畝碧學過什麼數據結構的東西,所以這兩個名字都是我自己按照字面的意思翻的,如果說錯了還請多多指教。
這兩個東西聽著好像很嚇人,其實非常容易理解。這里我用一個簡單食品目錄作為我們的示例數據。 我們的數據結構是這樣的:
Food
|
|---Fruit
| |
| |---Red
| | |
| | |--Cherry
| |
| |---Yellow
| |
| |--Banana
|
|---Meat
|
|--Beef
|
|--Pork
為了照顧那些英文一塌糊塗的PHP愛好者
Food:食物
Fruit:水果
Red:紅色
Cherry:櫻桃
Yellow:黃色
Banana:香蕉
Meat:肉類
Beef:牛肉
Pork:豬肉
③ sql 樹形結構遞歸查詢問題 求助求助求助
簡單示例
createtableTree
(
IDintidentity(1,1)primarykeynotnull,
Namevarchar(20)notnull,
Parentvarchar(20)null
)
go
insertTreevalues('大學',null)
insertTreevalues('學院','大學')
insertTreevalues('計算機學院','學院')前芹
insertTreevalues('網路工程','計算機學襲行院')
insertTreevalues('信息管理','計算機學院')
insertTreevalues('電信學院','學院')
insertTreevalues('教務處','大學')
insertTreevalues('材料科','教務處')
insertTreevalues('招生辦','大學')
go
withCTEas
(
-->Begin一個定位點成員
selectID,Name,Parent,cast(Nameasnvarchar(max))asTE,
-->End
unionall
-->Begin一個遞歸成員
selectTree.ID,Tree.Name,Tree.Parent,cast(replicate('',len(CTE.TE))+'|_'+Tree.nameasnvarchar(MAX))asTE,Levle+1asLevle
慧禪畢fromTreeinnerjoinCTE
onTree.Parent=CTE.Name
-->End
)
select*fromCTEorderbyID
④ sql 怎麼遞歸查詢的方法:
1.創建測試表,createtabletest_connect(idnumber,p_idnumber);
⑤ sql server樹形結構表統計每一級樹形下的所有子集數,
有如下數據表
create table tb(id varchar(3) , pid varchar(3) , name varchar(10));
insert into tb values('001' , null , '廣東省');
insert into tb values('002' , '001' , '廣州市');
insert into tb values('003' , '001' , '深圳市') ;
insert into tb values('004' , '002' , '天河區') ;
insert into tb values('005' , '003' , '羅湖區');
insert into tb values('006' , '003' , '福田區') ;
insert into tb values('007' , '003' , '寶安區') ;
insert into tb values('008' , '007' , '西鄉鎮') ;
insert into tb values('009' , '007' , '龍華鎮');
insert into tb values('010' , '007' , '松崗鎮');
假如我們要查詢ID為003的數據的所有子節點我們可以使用CTE 遞歸查詢完成...
with cte as
(
select a.id,a.name,a.pid from tb a where id='003'
union all
select k.id,k.name,k.pid from tb k inner join cte c on c.id = k.pid
)select * from cte
查詢結果如下:
003 深圳市 001
005 羅湖區 003
006 福田區 003
007 寶安區 003
008 西鄉鎮 007
009 龍華鎮 007
010 松崗鎮 007
⑥ 怎樣設計樹形目錄的資料庫用SQL
create table catelog(
id int identity(1,1) not null primary key,
description nvarchar(50),
parent_id int -- 存放父節點的ID
)
go
-- 建索引提高查詢性能。
create index ix_catelog_parent on catelog(parent_id)
go
⑦ Linq To Sql 如何實現遞歸查詢 樹形結構
--構造測試數據: 只作演示用
CREATE TABLE [dbo].[Tim_LinqTable](
[Id] int PRIMARY KEY IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Parent] int NOT NULL,
)
GO
INSERT INTO [Tim_LinqTable]
SELECT 'A',0 UNION ALL
SELECT 'A1',1 UNION ALL
SELECT 'A2',1 UNION ALL
SELECT 'B1',2 UNION ALL
SELECT 'B2',3 UNION ALL
SELECT 'C1',4 UNION ALL
SELECT 'C2',4 UNION ALL
SELECT 'D1',5 UNION ALL
SELECT 'D2',5 UNION ALL
SELECT 'D3',5
GO
WITH temp
AS
(
SELECT * FROM [Tim_LinqTable] WHERE Parent = 3
UNION ALL
SELECT m.* FROM [Tim_LinqTable] AS m
INNER JOIN temp AS child ON m.Parent = child.Id
)
SELECT * FROM temp
GO
--查詢 Parent=3 的所有子數據結果如下罩鬧:
Id Name Parent
----------- -------------------------------------------------- -----------
5 B2 3
8 D1 5
9 D2 5
10 D3 5
(4 row(s) affected)
//好中鍵,下物培罩邊來看看用C#怎麼實現上邊的SQL語句吧:
void Main()
{
var query=GetClassID(3);
Console.WriteLine("Id\tName\tParent");
query.ToList().ForEach(q=>Console.WriteLine("{0}\t{1}\t{2}",q.Id,q.Name,q.Parent));
/*
Id Name Parent
5 B2 3
8 D1 5
9 D2 5
10 D3 5
*/
}
public IEnumerable<Tim_LinqTable> GetClassID(int p_id)
{
var query = from c in this.Tim_LinqTables
where c.Parent == p_id
select c;
return query.ToList().Concat(query.ToList().SelectMany(t => GetClassID(t.Id)));
}
⑧ 請教一個關於樹形分類的SQL寫法,急!!
我有一張產品分類表,結構如下ID
產品編碼
產品名稱1
01
a
--為一級分類2
0102
b
--二級分類3
010512
c
--三級分類物塌說明產編蔽螞隱碼長度為2代表一級分宏廳類,長度為4代表二級分類,依次類推現在我想要變成如下結構:ID
產品編碼
產品一級分類名稱
產品二級分類名稱
產品三級分類名稱1
01
a
2
0102
a
b3
010512
a
c
⑨ sql里樹形結構分組排序
createtableT1(thisvarchar(10),parentvarchar(10))
insertintoT1(this,parent)
values('id1',null)
,('id2',null)
,('id3','id1')
,('id4','id2')
,('id5','id3')
,('id6','id3')
,('id7','id4')
,('id8','id7')
--sqlserver的cte功能
withtree(this,parent,root,depth)as(
selectthis,parent,thisasroot,
unionall
selecta.this,a.parent,b.root,b.depth+1asdepthfromT1a,treebwherea.parent=b.this
)
selectthis,parent,root,depth
fromtree
orderbyroot,depth,this