php - 无法找出 "approve post once 10 users like it"的系统

标签 php mysql voting

我有一个文章投票系统。文章存储在“stories”表中,所有投票存储在“votes”表中。 “stories”表中的 id 等于“votes”表中的 item_name(因此每个投票都与具有 item_name 的文章相关)。

我希望当投票总数达到 10 时,它会将“stories”表中的“showing”字段更新为值“1”。

这是我现在用来将选票插入数据库的查询(我想向其中添加一些内容或创建另一个查询来对用户正在投票的文章的 vote_values 求和,并查看它们是否> 10(如果是设置显示 = 1) ):

$q = "INSERT INTO {$this->votes_table} (`vote_value`, `item_name`, `ip`) VALUES({$dir}, '{$story_id}', '{$ip}')";

这是我的数据库结构:

故事表

enter image description here


投票表

enter image description here

最佳答案

尝试:

CREATE TEMPORARY TABLE tmp_ids SELECT s.id
FROM stories s 
JOIN votes v ON v.item_name = s.id 
WHERE s.showing != 1
GROUP BY s.id 
HAVING SUM(v.vote_value) >= 10;

UPDATE stories SET showing = 1 WHERE id IN (SELECT id FROM tmp_ids)

//每次投票编辑版本

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

关于php - 无法找出 "approve post once 10 users like it"的系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8596798/

相关文章:

php - 意外 = 错误信息

php - 提高 `Update` 性能(行锁定问题)

php - MySQL 加入特定的 WHERE 子句

Mysql View 连接多个表导致查询速度慢

php - JOIN with 2 Tables (Voting) Mysql, PHP

php - 递归遍历数组并打印遍历路径

mysql - Infobright Enterprise Edition (IEE) 服务无法启动?

php - Doctrine,symfony2 正确的列类型用于计算小时数

php - 如何将数学函数应用于 MySQL 查询?

ios - 无法使用 Swift 和 Parse 在没有特定 objectId 错误的情况下进行更新