bbs的資料結構和儲存過程(二) (轉)
/* */
/* procedure : up_GetForumList */
/* */
/* Description: 取得版面列表 */
/* */
/* Parameters: None */
/* */
/* Use table: forum , bbsuser */
/* */
/* Author: bigeagle@163 */
/* */
/* Date: 2000/2/10 */
/* */
/* History: */
/* */
/*************************************************************************/
if exists( * from syss where id = object_id('up_GetForumList'))
drop proc up_GetForumList
go
create proc up_GetForumList
as
select a.id , a.id , a.herid , a.layer , a.title , a.topiccount , a.description ,
'UserID'=b.id , b.UserName , b.E , b.Homepage , b.Signature
from forum as a join BBSUser as b on a.Masterid=b.ID order by rootid , layer
go
select id , title , rootid from forum
up_getforumlist
/*************************************************************************/
/* */
/* procedure : up_InsertForum */
/* */
/* Description: 新建版面 */
/* */
/* Parameters: @a_strName : 版面名稱 */
/* @a_strDescription: 版面描述 */
/* @a_intFatherID: 分類ID,如果是0說明是大分類 */
/* */
/* Use table: forum */
/* */
/* Author: bigeagle@163.net */
/* */
/* Date: 2000/4/23 */
/* */
/* History: */
/* */
/*************************************************************************/
if exists(select * from sysobjects where id = object_id('up_InsertForum'))
drop proc up_InsertForum
go
create proc up_InsertForum @a_strName varchar(50) , @a_strDescription varchar(255) , @a_intFatherID tinyint
as
/*定義區域性變數*/
declare @intLayer tinyint
declare @intRootID tinyint
/*如果是版面並且沒有指定分類,則返回-1*/
if(@a_intFatherID <> 0 and not exists(select * from forum where id = @a_intFatherID))
return(-1)
/*根據@a_intFatherID計算layer , rootid*/
if(@a_intFatherID = 0)
begin
select @intLayer = 0
select @intRootID = 0
end
else
begin
select @intLayer = 1
select @intRootID = @a_intFatherID
end
Insert into Forum(rootid , layer , fatherid , title , description)
values(@intRootID , @intLayer , @a_intFatherID , @a_strName , @a_strDescription)
if (@a_intFatherID = 0)
begin
select @intRootID = @@ntity
update Forum set rootid = @intRootID where id = @intRootID
end
go
/*************************************************************************/
/* */
/* procedure : up_DeleteForum */
/* */
/* Description: 刪除版面 */
/* */
/* Parameters: @a_intForumID : 版面id */
/* */
/* Use table: forum */
/* */
/* Author: bigeagle@163.net */
/* */
/* Date: 2000/4/23 */
/* */
/* History: */
/* */
/*************************************************************************/
if exists(select * from sysobjects where id = object_id('up_DeleteForum'))
drop proc up_DeleteForum
go
create proc up_DeleteForum @a_intForumID tinyint
as
delete from Forum where id = @a_intForumID
delete from Forum where RootID = @a_intForumID
go
select id , title , rootid , fatherid from forum
/*************************************************************************/
/* */
/* procedure : up_PostTopic */
/* */
/* Description: 發貼子 */
/* */
/* Parameters: @a_intForumID : 版面id */
/* @a_intFatherID: 父貼ID,如果是新主題為0 */
/* @a_strSubject: 標題 */
/* @a_strContent: 內容 */
/* @a_intUserID: 發貼人ID */
/* @a_intFaceID: 表情ID */
/* @a_strIP: 發貼人*/
/* */
/* Use table: bbs , forum , bbsuser */
/* */
/* Author: bigeagle@163.net */
/* */
/* Date: 2000/2/13 */
/* */
/* History: */
/* */
/*************************************************************************/
if exists(select * from sysobjects where id = object_id('up_PostTopic'))
drop proc up_PostTopic
go
create proc up_PostTopic
@a_intForumID int ,
@a_intFatherID int ,
@a_strSubject varchar(255) ,
@a_strContent text ,
@a_intUserID int ,
@a_intFaceID int ,
@a_strIP varchar(255)
as
/*定義區域性變數*/
declare @intRootID int --根id
declare @lOrderNum float(53) --排序基數
declare @intLayer int --層
declare @dblNextOrderNum float(53) --下一回貼的ordernum
/*判斷有沒有這個版面*/
if not exists(select * from forum where id = @a_intForumID)
return(-1)
/*判斷新貼子還是回應貼子*/
if (@a_intFatherID = 0) --根貼
begin
select @intRootID = isnull(max(id) , 0) + 1 from bbs
select @dblOrderNum = 9e+24
select @intLayer = 1
end
else --回貼
begin
select @intRootID = rootid , @intLayer = layer + 1 , @dblOrderNum = ordernum
from bbs where id = @a_intFatherID
/*如果沒找到父貼則返回錯誤*/
if (@@rowcount = 0) return -1
/*計算ordernum*/
select @dblNextOrderNum = isnull(max(ordernum), 0)
from bbs where ordernum < @dblOrderNum and rootid=@intRootID
select @dblOrderNum = (@dblOrderNum + @dblNextOrderNum) / 2
end
/*由於對兩個表操作,用事務*/
Begin transaction
/*插入貼子*/
insert into bbs(RootID , FatherID , Layer , OrderNum , UserID , ForumID ,
Subject , Content , FaceID , IP)
values(@intRootID , @a_intFatherID , @intLayer , @dblOrderNum ,
@a_intUserID , @a_intForumID ,
@a_strSubject , @a_strContent , @a_intFaceID , @a_strIP)
/*判斷是否成功*/
if (@@error != 0) goto OnError
/*版面貼子數*/
update forum set topiccount = topiccount + 1 where id = @a_intForumID
if (@@error != 0) goto OnError
/*更新分數*/
update BBSUser set point = point + 1 where id = @a_intUserID
if (@@error !=0) goto OnError
/**/
commit transaction
return(0)
/*錯誤處理*/
OnError:
rollback transaction
return(-1)
go
select id from bbs where fatherid=0 order by rootid desc, ordernum desc
up_posttopic 1 , 12 , '哈哈哈,見笑了' , 'hello , world' , 1 , 1 , '203.93.95.10'
/*************************************************************************/
/* */
/* procedure : up_GetTopicList */
/* */
/* Description: 貼子列表 */
/* */
/* Parameters: @a_intForumID : 版面id */
/* @a_intPageNo: 頁號 */
/* @a_intPageSize: 每頁顯示數,以根貼為準 */
/* */
/* Use table: bbs , forum */
/* */
/* Author: bigeagle@163.net */
/* */
/* Date: 2000/2/14 */
/* */
/* History: */
/* */
/*************************************************************************/
if exists(select * from sysobjects where id = object_id('up_GetTopicList'))
drop proc up_GetTopicList
go
create proc up_GetTopicList
@a_intForumID int ,
@a_intPageNo int ,
@a_intPageSize int
as
/*定義區域性變數*/
declare @intBeginID int
declare @intEndID int
declare @intRootRecordCount int
declare @intPageCount int
declare @intRowCount int
/*關閉計數*/
set nocount on
/*檢測是否有這個版面*/
if not exists(select * from forum where id = @a_intForumID)
return (-1)
/*求總共根貼數*/
select @intRootRecordCount = count(*) from bbs where fatherid=0 and forumid=@a_intForumID
if (@intRootRecordCount = 0) --如果沒有貼子,則返回零
return 0
/*判斷頁數是否正確*/
if (@a_intPageNo - 1) * @a_intPageSize > @intRootRecordCount
return (-1)
/*求開始rootID*/
set @intRowCount = (@a_intPageNo - 1) * @a_intPageSize + 1
/*限制條數*/
set rowcount @intRowCount
select @intBeginID = rootid from bbs where fatherid=0 and forumid=@a_intForumID
order by id desc
/*結束rootID*/
set @intRowCount = @a_intPageNo * @a_intPageSize
/*限制條數*/
set rowcount @intRowCount
select @intEndID = rootid from bbs where fatherid=0 and forumid=@a_intForumID
order by id desc
/*恢復變數*/
set rowcount 0
set nocount off
select a.id , a.layer , a.forumid , a.subject , a.faceid , a.hits , a.time , a.UserID , a.fatherid , a.rootid ,
'Bytes' = datalength(a.content) , b.UserName , b. , b.HomePage , b.Signature , b.Point
from bbs as a join BBSUser as b on a.UserID = b.ID
where Forumid=@a_intForumID and a.rootid between @intEndID and @intBeginID
order by a.rootid desc , a.ordernum desc
return(@@rowcount)
--select @@rowcount
go
up_getTopiclist 3 , 1 , 20
select * from bbs where fatherid=0 order by id desc
select * from bbsuser
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990454/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- bbs的資料結構和儲存過程(一) (轉)資料結構儲存過程
- bbs的資料結構和儲存過程(三) (轉)資料結構儲存過程
- MySQL的物理儲存結構和session過程MySqlSession
- 【資料結構——圖和圖的儲存結構】資料結構
- 利用mysqldump只匯出資料庫的表結構、儲存過程和函式MySql資料庫儲存過程函式
- 【PHP資料結構】圖的概念和儲存結構PHP資料結構
- 資料庫儲存過程資料庫儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- 批量插入資料的儲存過程儲存過程
- SQL Server 比較兩個資料庫的檢視和儲存過程結構差異SQLServer資料庫儲存過程
- 資料結構-二叉樹的儲存結構與遍歷資料結構二叉樹
- 自動生成對錶進行插入和更新的儲存過程的儲存過程 (轉)儲存過程
- 【SqlServer】清除過期資料的儲存過程SQLServer儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- 儲存過程返回資料集儲存過程
- Oracle 儲存過程返回結果集|轉|Oracle儲存過程
- Oracle 儲存過程返回結果集 (轉)Oracle儲存過程
- JAVA儲存過程(轉)Java儲存過程
- 層次結構資料的資料庫儲存和使用資料庫
- 儲存過程呼叫不同資料庫的資料儲存過程資料庫
- Mysql 的儲存過程和儲存函式MySql儲存過程儲存函式
- MySQL的寫入資料儲存過程MySql儲存過程
- HBase 資料儲存結構
- Oracle資料儲存結構Oracle
- TorchV的RAG實踐分享(三):解析llama_index的資料儲存結構和召回策略過程Index
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- 資料庫設計:儲存過程資料庫儲存過程
- C#資料結構-二叉樹-順序儲存結構C#資料結構二叉樹
- 淺談資料庫中的儲存過程資料庫儲存過程
- 樹形結構資料儲存方案(二): 物化路徑
- 管理資料庫儲存結構資料庫
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- SQL分隔字串的儲存過程 (轉)SQL字串儲存過程
- 將表資料生成SQL指令碼的儲存過程和工具SQL指令碼儲存過程
- SQL Server 資料備份儲存過程SQLServer儲存過程
- 資料庫許可權-儲存過程資料庫儲存過程