用MySQL在网络站点上存储评论


Store comments on networking site with MySQL

我想为一个项目创建一个MySQL数据库,在这个项目中用户可以来对其他配置文件发表评论。每个配置文件都有一个唯一的id来标识它,现在,当一个用户来对其他配置文件发表评论时,我需要存储发表评论的人和在其配置文件上发表评论的人的用户id,以及我需要将评论存储在数据库中。

由于许多用户可以在单个配置文件上发表评论,因此我需要在单个配置文件中存储所有评论和发表评论的用户。为此,我应该创建多少个表,它们应该有多少列?为此,我正在考虑创建一个名为user_comments的表,其中列user_id, commenter_id(所有评论其id的评论者用逗号分隔),评论(然后所有用户评论用逗号分隔)。

这能行吗?

为此,我正在考虑创建一个名为user_comments的表列user_id,评论者_id(所有评论者注释他们的id用逗号分隔),注释(然后所有的用户注释以逗号分隔)

没有神

!快到了:

Table comments
id           INT AUTO_INCREMENT
recipient_id
sender_id
message      TEXT
[ sent       DATETIME ]
[ other meta data ]

message中存储一条消息。为每个消息创建一行

我有一个profile_comment表:

id, text, profile_user_id, commenter_user_id, created_at

user表:

id, name, email

您可以在这里看到,第一个表有两个指向用户表的外键——一个指向概要文件的所有者,另一个指向评论的所有者。您可以按照created_at的顺序对它们进行排序,以列出它们,就像在博客上一样,可以按正反序排列。

现在,当您呈现配置文件页面时,您可以从查询字符串中获得配置文件id:

$profileId = isset( $_GET['profile_id'] ) ? $_GET['profile_id'] : null;

从这里,您可以将其添加到SQL查询中:

SELECT * FROM profile_comment
WHERE profile_user_id = :profile_id
ORDER BY created_at

这里的冒号是一个占位符,您可以与参数化的查询一起使用,这有助于防止SQL注入。但是,如果您小心地不污染插入其中的任何用户输入,则可以将语句构建为字符串。