2017-02-14 79 views
0

我有MySQL的表,其中用户可以在网站上发布一些内容如下:PHP MySQL的评论

CREATE TABLE `Posts` (
    `id` int(6) UNSIGNED NOT NULL, 
    `name` varchar(30) NOT NULL, 
    `post` varchar(8000) NOT NULL, 
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
) 

现在我想创建一个用户对帖子发表评论的表。我不知道正确的做法,缺乏知识。 我可以创建新的表像这样

CREATE TABLE `Comments` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `name` varchar(30) NOT NULL, 
    `comment` varchar(800) NOT NULL, 
    `postId` varchar(8) NOT NULL, 
) 

,当用户的意见,我可以显示从后表和“注释”表“帖子ID”连接“ID”这一评论。

这是正确的方式来做到这一点,还是有更好的方式来发表评论邮政表?

+3

基本上可以用一个外键将它们链接。当用户发表评论时,将用户标识作为外键保存在评论表中,然后检索用户的评论,将您的查询中的两个表加入 – Akintunde007

+0

阅读本文,其中介绍了外键的基本知识:https://www.sitepoint.com/mysql-foreign-keys-quicker-database-development/ – GreensterRox

回答

1

基本上,你可以用这样的外键链接。

Posts (
     id int(6) UNSIGNED NOT NULL, 
     name varchar(30) NOT NULL, 
     post varchar(8000) NOT NULL, 
     date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
    ); 

如果你愿意,你可以为用户定义一个外键(这是一个很好的实践)。现在

CREATE TABLE Comments (
     id int(10) NOT NULL AUTO_INCREMENT, 
     name varchar(30) NOT NULL, 
     comment varchar(800) NOT NULL, 
     postId int(11) NOT NULL, 
     user_id int(11) DEFAULT NULL 
); 


ALTER TABLE Comments ADD CONSTRAINT id_fk_post 
FOREIGN KEY(postId) REFERENCES Posts (id); 


ALTER TABLE Comments ADD CONSTRAINT id_fk_user 
FOREIGN KEY(user_id) REFERENCES Users (id); 

,你可以搜索信息的所有评论是这样的:

SELECT * FROM Comments where postId = 3; 
1
CREATE TABLE `Users` (
    `user_id` int(6) UNSIGNED NOT NULL, 
    `name` varchar(30) NOT NULL, 
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
) 

CREATE TABLE `Comments` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `name` varchar(30) NOT NULL, 
    `comment` varchar(800) NOT NULL, 
    `postId` varchar(8) NOT NULL, 
    `user_id_fk` int(6) NOT NULL 
) 

因此,当用户发布评论时,您将用户的ID与评论一起保存在评论表中。

要检索,你可以试试:

$query = 'SELECT Users.user_id, 
       Users.name, 
       Comments.comment FROM User JOIN Comments ON Users.user_id= Comments.user_id_fk 
         ';