zoukankan      html  css  js  c++  java
  • MySQL存储过程(批量生成论坛中发帖、回帖、主题等数据)

    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='192.168.1.1';
    set @vmessagea=concat('发帖内容',floor(1+RAND()*10000000),' ');
    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);

  • 相关阅读:
    python基础语法
    头文件和库文件
    #pragma的用法
    C++ signal的使用
    Glog
    Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量
    /etc/ld.so.conf详解
    拿与不拿的dfs
    空白字符读取和处理
    统计频率----初始条件的设置
  • 原文地址:https://www.cnblogs.com/NiceTime/p/8556706.html
Copyright © 2011-2022 走看看