一般来说,我对数据库,数据库体系结构和MySQL相对较新,所以如果我的方法不是最佳方法,请原谅我。我创建了一个名为comments
的表,我想将用户id
存储在该表中,该列post_id
可以正常使用。该表的唯一目的是存储张贴在任何给定用户个人资料上的消息以及一些其他相关信息。
但是,我想允许重复的条目,以便我可以读取comments
表并查找某些用户id
,然后从comments
表中获取列comments
,并将其显示在用户个人资料中,其中已匹配。
我可以通过在id
和INNER JOIN
上执行comments
来实现,特别是user_info
中的post_id
和comments
中的id
。
从用户个人资料将信息发布到数据库时,出现以下错误
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '59' for key 'post_id'
用户信息
'user_info', 'CREATE TABLE `user_info` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `username` varchar(12) COLLATE utf8_unicode_ci NOT NULL,\n `pass` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,\n `joined` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (`id`),\n UNIQUE KEY `username` (`username`)\n) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci'
注释
'comments', 'CREATE TABLE `comments` (\n `post_id` int(11) DEFAULT NULL,\n `comment` text COLLATE utf8_unicode_ci,\n `date_posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,\n UNIQUE KEY `post_id` (`post_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci'
让我知道我是否缺少任何可能帮助您回答问题的信息。
最佳答案
您需要在post_id上删除唯一索引:
ALTER TABLE `comments` DROP INDEX post_id;
然后可以根据需要创建一个非唯一索引:
ALTER TABLE `comments` ADD INDEX `post_id` (`post_id`);
另外,您的
comments
表缺少主键。创建一个自动递增整数列:comment_id,它将标识记录。