mysql的“喜欢”结构表
我工作的一个网站,用户可以使用此表结构发表文章:mysql的“喜欢”结构表
CREATE TABLE IF NOT EXISTS `articles` (
`id_articles` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_users` int(10) unsigned NOT NULL,
`articles` text NOT NULL,
PRIMARY KEY (`id_articles`),
UNIQUE KEY `id_articles` (`id_articles`),
KEY `id_users` (`id_users`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
每个用户可以“喜欢”的文章。
是,下面的正确的方式来创建一个“如表”:
CREATE TABLE IF NOT EXISTS `articles_likes` (
`id_articles` int(10) unsigned NOT NULL,
`id_users` int(10) unsigned NOT NULL,
KEY `id_articles` (`id_articles`,`id_users`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
这是一个有效的方式克里斯。您可以使用COUNT()
将articles_likes
表中的id_articles
与您在articles
中查看的当前文章相匹配。
$articles_id = 23;
mysql_query("SELECT COUNT(*) FROM articles_likes
WHERE id_articles = ".$articles_id);
你也可以离开COUNT()(MySQL的),并立即知道哪些用户是对返回数组中的文章和使用计数()(PHP)的“likers”复制COUNT的影响()在MySQL中。
Thanks for t他的回答:)) – Chris 2013-02-19 14:40:48
我总共有3个表格。一个文章表,用户ID可以是提交文章的用户的一个专栏,但是你需要一个单独的用户表,因为并非所有的用户都会提交文章(我假设),然后是第三个表,用户的主键和文章的主键,并将它们用作外键。所以每次文章被喜欢时,在第三张表格中输入一个条目
克里斯在上面陈述的方式并不要求用户发布文章来表达文章上的“赞”。当编写错误的代码时,基于FK的绑定关系的方式很不错:)。也许为他添加一个例子来模拟它) – 2013-02-19 14:33:19
这是正确的,但是您希望在id_articles和id_users上添加separte索引(您也可以将列名'id_article'和'id_user '为了理智)。
CREATE TABLE IF NOT EXISTS `article_likes` (
`id_article` int(10) unsigned NOT NULL,
`id_user` int(10) unsigned NOT NULL,
KEY `id_article` (`id_article`),
KEY `id_user` (`id_user`)
) ENGINE=InnoDB;
要单独的索引的原因是因为在MySQL如果创建关于列的索引(A,B),该指数将在具有在where子句塔A的查询,或列A和B中使用 在你的情况下,例如,如果你做了一个查询“SELECT * FROM article_likes WHERE id_user = X”,这个查询就不会使用索引。 更好的选择是在组合索引的第二列上添加组合索引和单独索引。就像这样:
CREATE TABLE IF NOT EXISTS `article_likes` (
`id_article` int(10) unsigned NOT NULL,
`id_user` int(10) unsigned NOT NULL,
KEY `id_article_user` (`id_article`, `id_user`),
KEY `id_user` (`id_user`)
) ENGINE=InnoDB;
这样“WHERE id_article = X”, “WHERE id_article = X和id_user = Y”
是看起来不错,你会像 'WHERE id_user = X',查询最佳性能..但是我会用'id_articles'和'id_users'来创建一个复合主键,这样你就只能像这样一篇文章一样。 – bitWorking 2013-02-19 14:33:40
在添加'like'之前,我还可以检查id_articles和id_users是否在这个表格中。 – Chris 2013-02-19 14:58:28
是的,你可以......但你永远不知道数据是如何进入db不久(web服务等)的,而且使用主键可以确保永远不会有双重入口 – bitWorking 2013-02-19 15:02:51