mysql存儲過程(批量生成論壇中發帖、回帖、主題等數據)

来源:https://www.cnblogs.com/NiceTime/archive/2018/03/13/8556706.html
-Advertisement-
Play Games

USE 資料庫名稱1;DROP PROCEDURE IF EXISTS 資料庫名稱1.存儲過程名稱;delimiter $$CREATE PROCEDURE 資料庫名稱1.存儲過程名稱(in v_count bigint,in v_count2 bigint)BEGINset @vCount1=v_ ...


USE 資料庫名稱1;
DROP PROCEDURE IF EXISTS 資料庫名稱1.存儲過程名稱;
delimiter $$
CREATE PROCEDURE 資料庫名稱1.存儲過程名稱(in v_count bigint,in v_count2 bigint)
BEGIN
set @vCount1=v_count;
set @vCount2=v_count2;

set @i=1;
set @vintervala=10000;
set @vintervalb=10000;
while(@i<=@vCount1)
do
#隨機獲取一個版塊ID
select fid into @vfid from tps_forum_forum where fup<>0 and `type`='forum' and `status`=1 order by rand() limit 1;

#獲取pid
select ifnull(max(pid)+1,1) into @vpid from tps_forum_post;

#獲取tid
select ifnull(max(tid)+1,1) into @vtid from tps_forum_post;

#獲取發帖的storeid username
select m.uid,m.username into @vuida,@vusernamea from tps_common_member m where m.uid>4 and m.`status`=0 order by rand() limit 1,1;

set @vintervala=@vintervala+@i;
set @vintervalb=@vintervalb+@i*100;

set @vtitlea=concat('發帖標題',floor(1+RAND()*10000000));
set @vpostdate=unix_timestamp(DATE_FORMAT(LOCALTIME()+@vintervala,'%Y-%m-%d %H:%i:%S'));

set @vip='211.161.61.12';
set @vmessagea=concat('發帖內容',floor(1+RAND()*10000000),'\r\n');
set @vporta=floor(10000+RAND()*55535);

#set @vportb=floor(10000+RAND()*55535);
set @vmessageb=concat('回覆的第',@vtid,'個帖子的內容');

#3新增發送帖子的信息
INSERT INTO `tps_forum_post` (`pid`, `fid`, `tid`, `first`, `author`, `authorid`, `subject`, `dateline`, `message`, `useip`, `port`,
`invisible`, `anonymous`, `usesig`, `htmlon`, `bbcodeoff`, `smileyoff`, `parseurloff`, `attachment`, `rate`, `ratetimes`, `status`, `tags`, `comment`, `replycredit`, `position`)
VALUES (@vpid, @vfid, @vtid, 1, @vusernamea, @vuida, @vtitlea,@vpostdate,@vmessagea, @vip, @vporta, 0, 0, 1, 0, -1, -1, 0, 0, 0, 0, 0, '', 0, 0, 1);

#最新主題信息表
INSERT INTO `tps_forum_newthread` (`tid`, `fid`, `dateline`) VALUES (@vtid,@vfid, @vpostdate);

#分表協調信息表
insert into tps_forum_post_tableid values();

#假設1個帖子有50000個回覆
set @j=1;
while(@j<=@vCount2)
do
#獲取回帖的storeid username
select m.uid,m.username into @vuidb,@vusernameb from tps_common_member m where m.uid>4 and m.`status`=0 order by rand() limit 1000,1;

#獲取pid
select ifnull(max(pid)+1,1) into @vpid from tps_forum_post;

set @vreplaydate=unix_timestamp(DATE_FORMAT(LOCALTIME()+@vintervalb,'%Y-%m-%d %H:%i:%S'));

set @vposition=@j+1;

#2分表協調表
insert into tps_forum_post_tableid values();

#3新增回覆帖子的信息
INSERT INTO `tps_forum_post` (`pid`, `fid`, `tid`, `first`, `author`, `authorid`, `subject`, `dateline`, `message`, `useip`, `port`,
`invisible`, `anonymous`, `usesig`, `htmlon`, `bbcodeoff`, `smileyoff`, `parseurloff`, `attachment`, `rate`, `ratetimes`, `status`, `tags`, `comment`, `replycredit`, `position`)
VALUES (@vpid, @vfid, @vtid, 0, @vusernameb, @vuidb, '', @vreplaydate, @vmessageb, @vip, @vporta, 0, 0, 1, 0, -1, -1, 0, 0, 0, 0, 0, '0', 0, 0, @vposition);

#主題參與者記錄表,第1個回覆的帖子信息
INSERT INTO `tps_forum_threadpartake` (`tid`, `uid`, `dateline`)
select tid,authorid,dateline
from tps_forum_post where fid=@vfid and tid=@vtid and first=0 and position=2;


#主題參與者記錄表,第@vCount2+1個回覆的帖子信息
INSERT INTO `tps_forum_threadpartake` (`tid`, `uid`, `dateline`)
select tid,authorid,dateline
from tps_forum_post where fid=@vfid and tid=@vtid and first=0 and position=@vCount2+1;

COMMIT;

set @j=@j+1;
end while;

#獲取position
select max(position) into @vposition from tps_forum_post where first=0 and tid=@vtid;
select count(0) into @vreplay from tps_forum_post where first=0 and tid=@vtid;
select max(dateline) into @vreplaydate from tps_forum_post where first=0 and tid=@vtid;

#1論壇主題信息表
INSERT INTO `tps_forum_thread` (`tid`, `fid`, `posttableid`, `typeid`, `sortid`, `readperm`, `price`, `author`, `authorid`, `subject`, `dateline`, `lastpost`,
`lastposter`, `views`, `replies`, `displayorder`, `highlight`, `digest`, `rate`, `special`, `attachment`, `moderated`, `closed`, `stickreply`, `recommends`,
`recommend_add`, `recommend_sub`, `heats`, `status`, `isgroup`, `favtimes`, `sharetimes`, `stamp`, `icon`, `pushedaid`, `cover`, `replycredit`, `relatebytag`,
`maxposition`, `bgcolor`, `comments`, `hidden`)
VALUES (@vtid,@vfid, 0, 0, 0, 0, 0, @vusernamea, @vuida, @vtitlea, @vpostdate, @vreplaydate,@vusernamea, floor(1000+rand()*10000), @vreplay, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, floor(0+rand()*2), 32, 0, 0, 0, -1, -1, 0, 0, 0, '0', @vposition, '', 0, 0);

#獲取版塊內主題數量
select count(0) into @vthreadCount from tps_forum_thread where fid=@vfid;

#獲取版塊內發帖子數量
select count(0) into @vpostCount from tps_forum_post where first=1 and fid=@vfid;

#獲取今日發帖數量
select count(0) into @vtodayposts from tps_forum_post where first=1 and fid=@vfid
and dateline>=unix_timestamp(date_format(localtime(),'%Y-%m-%d')) and
dateline<=unix_timestamp(DATE_ADD(date_format(localtime(),'%Y-%m-%d'),INTERVAL 24*60*60-1 SECOND));

#獲取發帖綜合信息
select fp.pid,fp.message,fp.dateline,fp.author into @vpid,@vmessage,@vdateline,@vauthor
from tps_forum_post fp where first=1 and fid=@vfid order by dateline desc limit 1;

#更新版塊表中 主題 帖子 今日發帖數據 及發帖綜合信息
update tps_forum_forum ff set ff.threads=@vthreadCount,ff.posts=@vpostCount,ff.todayposts=@vtodayposts,
ff.lastpost=concat(@vpid,@vmessage,@vdateline,@vauthor) where ff.fid=@vfid;

COMMIT;

set @i=@i+1;

END WHILE;
end $$
delimiter ;

call 資料庫名稱1.存儲過程名稱(3,10);


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介紹 改變數據類型是一個看起來很簡單的事情,但是如果表非常大或者有最小停機時間的要求,又該如何處理那?這裡我提供一個思路來解決這個問題。 背景 在一個常規SQL Server heath檢查中,使用sp_blitz,我們最大的生產表之一引發了令人擔憂的警報。保存客戶訂單信息的表的ID列是一個INT ...
  • create(創建表)標準的建表語句: create table [模式名.]表名 ( #可以有多個列定義 columnName1 dataType [default expr(這是預設值)], ... ) 圓括弧里可以包含多個列定義,每個列定義之間用英文逗號(,)隔開,最後一個列定義不需要逗號,直... ...
  • MySQL預處理技術:1.減輕伺服器壓力2.防止sql註入,把傳遞過去的危險字元也只當做參數處理3.將sql語句強制一分為二:第一部分為前面相同的命令和結構部分,第二部分為後面可變的數據部分基本使用 傳參: ...
  • 1.Scale(擴展):從資料庫來看,就是讓資料庫能夠提供更強的服務能力 ScaleOut: 是通過增加處理節點的方式來提高整體處理能力 ScaleUp: 是通過增加當前處理節點的處理能力來提高整體的處理能力 2.事務最小化原則: 避免分散式事務的解決方案 a)進行ScaleOut 設計的時候合理設 ...
  • 需求簡述 一個數據表中包含此數據的錄入時間,此數據的初始狀態是 有效 ,五天後系統自動置該數據的狀態為 無效 。 方案 1. 寫一個存儲過程,用於更新欄位(改狀態); 2. 寫一個job,用於定時執行存儲過程; 方案邏輯 存儲過程 1. 前提條件:此數據的狀態為 有效 狀態; 1. 獲取當前系統時間 ...
  • 資料庫約束: 約束是在表上強制執行的數據校驗規則,主要用於保證資料庫里數據的完整性。 除此之外,當表中的數據存在相互依賴性時,可以保證相關的數據不被刪除。 根據約束對數據列的限制,約束可分為如下兩類: 單列約束: 每個約束只約束一列 多列約束: 每個約束可以約束多個數據列為數據表指定約束有如下兩個時... ...
  • 由於RDS(oracle)不直接支持SSH,FTP(基於安全因素吧).所以原有系統expdp或exp出來的dmp文件,不能直接導入到RDS中。官方文檔里建議通過networklink或者dblink的方式 從原有資料庫遷移到RDS,考慮到網路和安全因素,此方法暫被忽略掉。 查找各種文檔發現,可以通過 ...
  • 例如:某個表中,插入了兩條除id外其他欄位都一樣的數據,但是查詢的時候只想查到一條。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...