我想为一个项目创建一个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注入。但是,如果您小心地不污染插入其中的任何用户输入,则可以将语句构建为字符串。