转自:http://www.cnblogs.com/yimiao/archive/2012/07/15/2592645.htmlphp
今天开始阅读discuz2.5的源码,这是发现的一些收获,记录一下。有兴趣的同窗能够去试试html
- CREATE TABLE pre_forum_post (
- pid int(10) unsigned NOT NULL COMMENT '帖子id',
- fid mediumint(8) unsigned NOT NULL default '0' COMMENT '论坛id',
- tid mediumint(8) unsigned NOT NULL default '0' COMMENT '主题id',
- `first` tinyint(1) NOT NULL default '0' COMMENT '是不是首贴',
- author varchar(15) NOT NULL default COMMENT '做者姓名',
- authorid mediumint(8) unsigned NOT NULL default '0' COMMENT '做者id',
- `subject` varchar(80) NOT NULL default COMMENT '标题',
- dateline int(10) unsigned NOT NULL default '0' COMMENT '发表时间',
- message mediumtext NOT NULL COMMENT '消息',
- useip varchar(15) NOT NULL default COMMENT '发帖者IP',
- invisible tinyint(1) NOT NULL default '0' COMMENT '是否经过审核',
- anonymous tinyint(1) NOT NULL default '0' COMMENT '是否匿名',
- usesig tinyint(1) NOT NULL default '0' COMMENT '是否启用签名',
- htmlon tinyint(1) NOT NULL default '0' COMMENT '是否容许HTML',
- bbcodeoff tinyint(1) NOT NULL default '0' COMMENT '是否关闭BBCODE',
- smileyoff tinyint(1) NOT NULL default '0' COMMENT '是否关闭表情',
- parseurloff tinyint(1) NOT NULL default '0' COMMENT '是否容许粘贴URL',
- attachment tinyint(1) NOT NULL default '0' COMMENT '附件',
- rate smallint(6) NOT NULL default '0' COMMENT '评分分数',
- ratetimes tinyint(3) unsigned NOT NULL default '0' COMMENT '评分次数',
- `status` int(10) NOT NULL default '0' COMMENT '帖子状态',
- tags varchar(255) NOT NULL default '0' COMMENT '新增字段,用于存放tag',
- `comment` tinyint(1) NOT NULL default '0' COMMENT '是否存在点评',
- replycredit int(10) NOT NULL default '0' COMMENT '回帖得到积分记录',
- `position` int(8) unsigned NOT NULL auto_increment COMMENT '帖子位置信息',
- PRIMARY KEY (tid, `position`),
- KEY fid (fid),
- KEY authorid (authorid,invisible),
- KEY dateline (dateline),
- KEY invisible (invisible),
- KEY displayorder (tid,invisible,dateline),
- KEY `first` (tid,`first`),
- UNIQUE KEY pid (pid)
- ) ENGINE=MyISAM COMMENT='帖子表';
这是discuz的post表,之前虽然玩过dz,可是没有仔细看过源码。mysql
你们注意下这个表的primary key,这样设置,若是插入数据,效果是这样的,一样的tid,position是自增的,这样就很好的解决了楼层,不在须要进行计算了。sql
本身测试几条数据,证实确实有上述的效果。ide
- mysql> select * from pre_forum_post;
- +-----+-----+----------+
- | pid | tid | position |
- +-----+-----+----------+
- | 1 | 1 | 1 |
- | 2 | 1 | 2 |
- | 3 | 2 | 1 |
- +-----+-----+----------+
- rows in set (0.00 sec)
帖子的pid应该也是一个自增的字段,dz里面是这样解决的:
- CREATE TABLE pre_forum_post_tableid (
- `pid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Post ID',
- PRIMARY KEY (`pid`)
- ) ENGINE=MyISAM COMMENT='post分表协调表';
往这个表里插入一个null,返回的pid做为帖子的pid
$pid = C::t('forum_post_tableid')->insert(array('pid' => null), true);
$data = array_merge($data, array('pid' => $pid));