0

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

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

这行得通吗?

4

2 回答 2

6

为此,我正在考虑为命名的 user_comments 创建一个表,其中包含 user_id 列、commenter_id(所有评论其 id 的评论者用逗号分隔)、comments(然后所有用户评论用逗号分隔)

天哪!_ 快到了

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

一条消息存储在message. 每条消息创建一行。永远不要将多条记录存储在同一字段中,并用任何东西分隔。

于 2013-05-29T18:37:36.723 回答
1

我有一张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 注入。但是,如果您注意不污染您插入其中的任何用户输入,则可以将语句构建为字符串。

于 2013-05-29T18:43:14.077 回答