Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mysql在php中进行星级评定_Php_Mysql - Fatal编程技术网

使用mysql在php中进行星级评定

使用mysql在php中进行星级评定,php,mysql,Php,Mysql,我正在工作的5星级评级,这是工作良好。现在我想优化数据库 CREATE TABLE IF NOT EXISTS `rating` ( `id` int(11) NOT NULL AUTO_INCREMENT, `article_id` int(11) NOT NULL, `vote` float NOT NULL, 'user_id' int(11) NOT NULL PRIMARY KEY (`id`) ) 这是我目前的数据库。现在如果10000个用户对同一篇文章进行评

我正在工作的5星级评级,这是工作良好。现在我想优化数据库

CREATE TABLE IF NOT EXISTS `rating` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `article_id` int(11) NOT NULL,
  `vote` float NOT NULL,
  'user_id' int(11) NOT NULL

  PRIMARY KEY (`id`)
)
这是我目前的数据库。现在如果10000个用户对同一篇文章进行评分,我在一个表中得到10000条记录


有谁能帮助我理解和优化数据库吗?

这取决于您的评级算法和要求。您可以使用五个字段(而不是一个字段)记录收到的星星数:

star1    integer not null default 0,
star2    integer not null default 0,
...
star5    integer not null default 0,
但是如果你这样做了,你就失去了改变用户想法的可能性

另一方面,只需要存储平均值,这样就可以存储

stars    integer not null default 0,
voters   integer not null default 0,
…但现在用户无法收回自己的投票,甚至不知道自己是否已投票

(你可以通过将每天或每周的投票存储在一个表中,包括datetime和投票者id等等,然后在average表中“提取”较旧的结果来折衷。现在投票者可以看到并撤销他上周所做的事情)


因此,您需要做的是清楚地陈述您的需求——用户可以做什么?系统必须能够做什么?等等,找出需要知道的信息;然后从那里派生表结构。如果数据太多(10000000条记录不多),您可以尝试向其投入更多硬件,或者看看是否可以以某种方式进行扩展—例如,如果您(通常)不需要跨文章信息(例如“最受欢迎的文章”),没有什么可以阻止您根据文章id在不同的服务器上对评级表进行分区,直到每个分区都足够小以满足您的需要。

10000
记录被认为是少量的,现在优化取决于您对应用程序执行的操作的性质以及经常使用的查询。您需要首先提供这些详细信息。每个星星对应一列。1*、2*等等。每次人们给它打分时,只要加上这个数字。@AbhikChakraborty一篇文章也可以达到10万,如果我得到100阿里,那么100*10万就足够了large@Irvin你能解释一下吗