Php 无法理解“一旦10个用户喜欢就批准帖子”的系统

Php 无法理解“一旦10个用户喜欢就批准帖子”的系统,php,mysql,voting,Php,Mysql,Voting,我对文章有投票制度。文章存储在“故事”表中,所有投票存储在“投票”表中。“故事”表中的id等于“投票”表中的项目名称,因此每次投票都与项目名称为的文章相关 我希望这样,当投票总数达到10时,它会将“故事”表中的“显示”字段更新为值1 下面是一个我用来将投票插入数据库的查询,现在我正在考虑向数据库中添加一些内容,或者创建另一个查询来对用户正在投票的文章的投票值求和,看看它们是否>10(如果是),如果设置为=1: $q = "INSERT INTO {$this->votes_table} (

我对文章有投票制度。文章存储在“故事”表中,所有投票存储在“投票”表中。“故事”表中的id等于“投票”表中的项目名称,因此每次投票都与项目名称为的文章相关

我希望这样,当投票总数达到10时,它会将“故事”表中的“显示”字段更新为值1

下面是一个我用来将投票插入数据库的查询,现在我正在考虑向数据库中添加一些内容,或者创建另一个查询来对用户正在投票的文章的投票值求和,看看它们是否>10(如果是),如果设置为=1:

$q = "INSERT INTO {$this->votes_table} (`vote_value`, `item_name`, `ip`) VALUES({$dir}, '{$story_id}', '{$ip}')";
以下是我的数据库结构:

故事表

投票表

尝试:

//每次投票时编辑版本

UPDATE stories s 
SET s.showing = IF((SELECT SUM(vote_value) FROM votes WHERE item_name = ?) >= 10, 1, 0)
WHERE s.id = ?

这里可能是触发器的一个很好的例子…嗨,对不起,我是php新手,触发器是什么?不要在项目名称[varhcar255]中存储id[int11],而是在名为story\u id[int11]的投票中创建一个外键,并使用piotrekkr针对此更改修改的SQL语句。触发器是执行特定事件时发生的数据库逻辑。因此,当选票表上发生插入时,您可以触发一些逻辑来更新Stories.showing列(当计数>=10时)。我喜欢避免在业务逻辑(如您的情况)规定代码应该存在于域中时触发。我说的不是与PHP相关的任何内容,而是在某些事件发生时执行的SQL语句序列。因此,您将创建一个触发器,该触发器在每次向投票表中插入一行时都会发生,它将执行select以查看是否有>=10个投票,如果有,则更新stories表。基本上我想说的是让MySQL为你做这件事,这样你就可以保持你的PHP整洁,不必担心额外的查询。好的,通过这个我可以选择投票值>=10的文章,但是我如何设置show=1?我添加了一个where条件,当投票时,不选择那些已经有show=1的故事的总投票,执行上面的SQL。当结果>=10时,将投票项目的显示列的Stories表更新为1。如果一个故事已经显示,您确实需要执行上面的SQL,除非您还允许向下投票,在这种情况下,您将需要每次执行它以捕获边缘案例。。。。如果每次有人投票时都执行修改后的SQL代码,那么它将不会水平扩展。随着报道和投票数量的增加,投票所需的时间也会增加。不,这更像是cron作业sql。如果您想在每次投票时更新显示,您可以更新故事集s.showing=1,其中s.id=?并从投票中选择SUMvote\u value,其中item\u name=s.id>=10
UPDATE stories s 
SET s.showing = IF((SELECT SUM(vote_value) FROM votes WHERE item_name = ?) >= 10, 1, 0)
WHERE s.id = ?