我已经阅读了几个教程,关于mysql,db结构的文档以及我通过php使用它几周.现在我遇到了问题,我不知道如何为帖子和评论形成/组织/创建我的数据库结构.我已经阅读了一些关于此的帖子(这里是*),但我没有找到任何有用的东西.我知道我需要有2个表用于帖子和评论,当我需要在页面上用外键(或ID)打印它时,我“合并”它们(仅在页面上,而不是在SQL上).当一个人正在查看该页面时,他正常看到帖子和评论,但在“背景”中,所有内容都存储在2个表格中.
每当有人添加新评论或回复时,我是否需要添加新列?
如果我的问题是真的,那意味着如果在帖子中有100条评论,那意味着我需要每次都改变这个表格吗?这意味着如果帖子“A”有3条评论并且帖子“B”有150条评论,那么我的表“评论”将有100列?
例如:
Posts | column1 | column2 | … | columnN
A | bla1 | bla2 | bla3 | – empty | – empty | … | – empty – |
B | bla1 | bal2 | bla3 | bla4 | bla5 | bla6 | … | bla100 |
解决方法:
在基本级别,您将在应用程序中为每种类型的“事物”创建一个表.在这种情况下,Posts表和Comments表.像这样简单:
Post
--------
Id
Content
User
DatePosted
Comment
--------
Id
PostId
Content
User
DatePosted
这将在帖子和评论之间创建所谓的一对多(或零对多,实际上)关系,其中每个帖子可以具有零个或多个关联的Pomments,但是每个评论可以仅与一个帖子相关联.
在您的代码中(完全是完整的其他主题),要显示帖子及其相关的评论,您可以做一些事情.假设您拥有所需帖子的ID作为输入,您可以获得该帖子及其评论:
SELECT `Content`, `User`, `DatePosted` FROM `Post` WHERE `Id` = ?Id
SELECT `Id`, `Content`, `User`, `DatePosted` FROM `Comment` WHERE `PostId` = ?Id
您对结果数据的处理取决于您以及您希望如何在应用程序中使用它.它将返回两个表结果,前者有一个记录(如果Post存在),后者有零个或多个记录.当然,您需要在尝试使用它们之前检查是否存在等等.(因此,如果第一个查询没有返回结果,请不要尝试继续显示Post.只显示默认响应或错误.)