所有的评论和回复都放在一张tb_question_answer(id,obid,type,content,user)表里。评论和回复用一字段type来区分。请问mysql如何查找所有的评论和回复?像QQ空间那样,对应一个日志ID,是如何查找出对应的评论和回复的?用一次select的话只能查找到一次回复的内容,如果有多重回复的话,如何写sql呢?
例如是这样的结果:
a:评论
aa:回复a的评论
aaa:回复aa的回复
c:回复a的评论
评论a id=1 一条回复a的回复aa id=2,obid=1 又有一个人看到aa对a的回复,然后对aa进行了回复aaa id=3,obid=1
如果有多个回复都对应到同一个id,肯定会查出来啊,你的表设计的估计很有问题
另外同一张表也可以自己联合自己查找,就像多表联合一样
表结构设计上不能完全递归,需要记录额外属性。要对回复的回复都认为是引用回复。类似下面这种结构。需要有一个id记录是属于某篇文章,不管多少层次的回复都有是哪篇文章的id
然后对回复的回复,则通过引用id来进行记录。
create table blog_comments(
comm_id number,--每一条评论的编号
--这里不设立主键,因为每一篇文章有很多评论,
--而这些评论是依赖与这篇文章的,如果这篇文章被删除了,
--那么这些评论也一并被删除,这个可以使用cascade级联删除
--这个你可以使用sequence来实现自增
ref_comm_id number,--引用评论的编号,参照本表的comm_id,
--默认为空,比如第一条评论就没有引用的评论
--如果是回复上面的评论,也用这个键值,不过是按钮名称不一样而已
blog_id number,--被评论的文章编号[可能是其他数据类型]
--这里的blog_id要参照文章id号,因为每条评论都是关联到一篇文章的
comm_time date default sysdate,--评论时间
comments varchar2(500 char)--一般评论都限制了字数
--当然可以有网页的html[asp[,jsp]]控件来控制
--总之,如果大于500,那么存进数据库时将截断
)
MySQL需要自定义函数来实现,http://blog.csdn.net/yangnianbing110/article/details/36664799
MySQL需要自定义函数来实现,http://blog.csdn.net/yangnianbing110/article/details/36664799
设计上加入一个path字段即可
参考:http://www.bitscn.com/pdb/php/201407/235988.html
其实并不需要区分 ,都可以看出是评论,只要在表里建2个字段id和 parentId 就可以表示出层级关系
举个例子:评论a 则表示 id :1 parentid: 0, a评论下面有一个回复,则 id:2 parentid:1,a下面又有一个回复,则 id:3 parentid:1
后面2个回复的parentid都对应第一个评论a的id,这样就可以无限的层级了
你要查询出来一个评论的话就是 where id=1 or parentId=1;
应该能明白了吧,这其实是一个树级结构,如果你想知道怎么展示的话,可以baidu下哦