• 请不要在回答技术问题时复制粘贴 AI 生成的内容
TANKING
V2EX  ›  程序员

关于网站的评论,留言功能是怎么开发的?

  •  
  •   TANKING · Mar 4, 2018 via iPhone · 6697 views
    This topic created in 3167 days ago, the information mentioned may be changed or developed.
    单页面的评论功能我知道怎么做,但是如果我的网站是一个博客,每发表一篇文章,底部都会有一个评论输入框,所以,我每发布一篇文章,都得向数据库新建一个表吗?还是只需要一个表,可以存放所有文章的底部评论?
    28 replies  •  2018-03-04 23:00:25 +08:00
    eyewater
    eyewater
    Mar 4, 2018 via Android
    1
    需要一个表可以存放所有文章的评论,通过外键与文章关联,显示的时候把每篇文章对应的评论通过外键进行查找即可
    TANKING
    TANKING
    OP
    Mar 4, 2018 via iPhone
    2
    @eyewater 不太懂外键,初学 MySQL
    lulinux
    lulinux
    Mar 4, 2018
    3
    评论输入框是前端模板中的一部分。只有发表了评论,才会操作后台数据库。
    loading
    loading
    Mar 4, 2018 via iPhone❤️2
    4
    文章表:文章 id,文章标题,文章内容
    评论表:文章 id,评论 id,评论内容

    文章 id=文章 id
    TANKING
    TANKING
    OP
    Mar 4, 2018 via iPhone
    5
    @lulinux 所以是如何操作,数据库如何设计才会让所有的文章的评论都存放到一个表呢?
    wemore
    wemore
    Mar 4, 2018 via Android
    6
    评论表:评论的一堆字段+文章 id。查文章的时候去评论表查对应文章 id 的评论。
    suzic
    suzic
    Mar 4, 2018 via Android
    7
    4l 简单可行
    TANKING
    TANKING
    OP
    Mar 4, 2018 via iPhone
    8
    @wemore 谢谢,这么说的话,好像有点眉头了😎😎😎
    eyewater
    eyewater
    Mar 4, 2018 via Android
    9
    @TANKING 4l 说的对,可以忽略我的了
    TANKING
    TANKING
    OP
    Mar 4, 2018 via iPhone
    10
    @eyewater 看明白了😊
    nuxt
    nuxt
    Mar 4, 2018❤️3
    11
    一个文章可以有多个评论,
    一个评论只属于一个文章,
    所以是一对多的关系,
    所以只需要在 comments 表里添加 post_id 就可以了,表明这个 comment 属于哪个 post_id
    loading
    loading
    Mar 4, 2018 via iPhone
    12
    这是关系型数据库的一般用法,这就是 关系。
    a378725574
    a378725574
    Mar 4, 2018 via Android
    13
    之前遇到过邮政宁愿送上楼也不肯放到快递柜,而且明言是可以省几毛钱。不过其他快递员都是直接放快递柜
    Tink
    Tink
    Mar 4, 2018 via iPhone
    14
    存储 blog 文章页 url
    a378725574
    a378725574
    Mar 4, 2018 via Android
    15
    我去回错帖
    laycher
    laycher
    Mar 4, 2018❤️1
    16
    搞个 wordpress,你自己可以写几条测试数据,看看数据库内容。
    qping
    qping
    Mar 4, 2018
    17
    @a378725574 #13 走错片场了,兄弟
    Allianzcortex
    Allianzcortex
    Mar 4, 2018 via iPhone
    18
    同 #4 @loading 用表结构和业务逻辑来存储比较好,尽量少用外键 foreign key
    ericgui
    ericgui
    Mar 4, 2018
    19
    其实评论还算 OK 的,但问题是那种盖楼的评论,就需要你仔细琢磨了。
    @laycher 你这个思路好
    panda1001
    panda1001
    Mar 4, 2018 via Android
    20
    可以参考下 wordpress 的数据库结构
    orangeade
    orangeade
    Mar 4, 2018 via Android
    21
    去看一下一些开源项目就知道了,比如 WordPress
    bbzt
    bbzt
    Mar 4, 2018
    22
    很简单啊,搞得我都想去做个收费的云评论服务
    MonoLogueChi
    MonoLogueChi
    Mar 4, 2018 via Android
    23
    前面说的很清楚了,大概就是每篇文章要有一个唯一的 key,这个 key 怎么产生你随意,加载评论的时候就是在数据库里搜索这个 key。而且每条评论也要有一个唯一的 key,回复评论的时候需要用到这个 key。
    coffeSlider
    coffeSlider
    Mar 4, 2018 via Android
    24
    @bbzt 那么多免费的评论插件,你还想做收费的?
    lewis1990
    lewis1990
    Mar 4, 2018
    25
    @loading 正解,那如果再涉及到评论回复的又该怎么设计?
    locoz
    locoz
    Mar 4, 2018
    26
    一般都是文章一个 ID 加载评论的时候用文章 ID 去查对应的评论
    评论自己有一个 ID 然后有一个上一层级的 ID (可以是文章的也可以是评论的)
    文章跟评论两个表解决
    crossoverJie
    crossoverJie
    Mar 4, 2018
    27
    @lewis1990 #25 回复类似 如果只是一个树状结构 只需要增加一个 pid 即可。
    sensui7
    sensui7
    Mar 4, 2018
    28
    1. 关系型数据库, 每发布一篇文章, 新建一条评论记录存储在评论表里. 每条记录包含一个文章 id, 这样文章和评论就关联了起来.

    2. nosql 数据库,

    1) 每篇文章嵌入一个子文档数组, 数组中每个子文档是一条评论. 优点是取文章时可以直接取得它的全部评论, 缺点是容易撑爆文档容量限制.
    2) 每篇文章包含一个数组, 数组存储的是评论 id. 评论在另一个表中存储.
    3) 每篇文章包含一个数组, 数组存储的是 bucket id, 每个 bucket 文档存储评论, bucket 大小按照分页设置, 一个 bucket 就是一页评论.
    4) 每条评论包含一个文章 id, 效果和关系型数据库一样.

    以上就是 1: N 数据库的处理方法.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2555 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 14:49 · PVG 22:49 · LAX 06:49 · JFK 09:49
    ♥ Do have faith in what you're doing.