我想为项目创建一个MySQL数据库,用户可以在其中对其他个人资料发表评论。每个配置文件都有唯一的ID来识别它,现在当用户来并对其他配置文件发表评论时,我需要存储发表评论的人的用户ID以及评论所在的人员,以及我需要将评论存储在数据库中。
由于许多用户可以对单个个人资料发表评论,因此我需要将所有评论和制作这些评论的用户存储在一个个人资料中。为此我应该创建多少个表以及它们应该有多少列?为此,我正在考虑为命名的user_comments创建一个表,其中包含列user_id
,commenter_id
(所有评论者用逗号分隔他们的id),注释(然后所有用户注释由逗号)。
这会有用吗?
答案 0 :(得分:5)
为此,我正在考虑为命名的user_comments创建一个表 并且有列user_id,commenter_id(所有评论者都是 评论他们的id由逗号分隔,评论(然后是所有用户 逗号分隔的评论)
上帝没有!你几乎那里:
Table comments
id INT AUTO_INCREMENT
recipient_id
sender_id
message TEXT
[ sent DATETIME ]
[ other meta data ]
在message
中存储一条消息。为每条消息创建一行。切勿将多个记录存储在由任何内容分隔的同一字段中。
答案 1 :(得分: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注入。但是,如果您要小心取消插入到其中的任何用户输入,可以将语句构建为字符串。