打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
嵌套评论的一个数据库设计技巧
userphoto

2012.08.30

关注

前些日子看drupal源码时学到的。要实现嵌套评论,只要在表里加一个parent_id字段即可,添加评论的时候很方便,不过显示起来就会慢/麻烦一点。其实只要在表里再添加一个字段,就可以高效/快速的显示评论了,这个字段就是thread。看一下SQL构造语句

CREATE TABLE IF NOT EXISTS `comments` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `parent_id` int(11) NOT NULL,  `topic_id` int(11) NOT NULL,  `user_id` int(11) NOT NULL,  `username` varchar(64) NOT NULL,  `created` int(11) NOT NULL,  `changed` int(11) NOT NULL,  `status` int(11) NOT NULL,  `content` text NOT NULL,  `thread` varchar(30) NOT NULL,  PRIMARY KEY (`id`),) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

thread类似这样

//存储在thread字段中的数据类似下面1/1.1/1.2/1.a/2/

加上"/“是因为”/“的ascii值大于任何数字,包括”.",这样如果要按时间倒序排序的话,直接

SELECT * FROM `comments` WHERE topic_id = 1 ORDER BY thread DESC

如果要按时间正序排序(从小到大)的话,就有问题了,因为"1/" > “1.1/”,结果就是"1.1/"在"1/“前面,这当然是不合理的,只要把最后的”/"去掉就行了,这样"1"就小于"1.1"

SELECT * FROM `comments` as c WHERE topic_id = 1 ORDER BY SUBSTRING(c.thread, 1, (LENGTH(c.thread) - 1)) ASC

显示时,可以根据thread里"."的数量处理缩进(回复的回复)



原文地址:http://blog.leezhong.com/tech/2010/08/27/nested-comments.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
修改ecshop评论对应到订单
MySQL约束
MYSQL语句调优:Explain 简述
pthread
hibernate 一对一实践
一站式Kafka平台解决方案——KafkaCenter
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服