计算mysql语句中的投票百分比
还没有表数据,无法正确测试它。:) 顺便问一下,数据库中应该以何种类型存储%整数计算mysql语句中的投票百分比,sql,mysql,Sql,Mysql,还没有表数据,无法正确测试它。:) 顺便问一下,数据库中应该以何种类型存储%整数 谢谢你的帮助 你没有说你用的是什么数据库(Postgresql、Mysql、Oracle等等),但是如果你用的是Mysql,你可以不使用数据库。不管怎样,四舍五入到整数,并且假设百分比始终在0到100之间,就可以了。您的问题似乎是没有任何测试数据,因此无法测试查询的语法。但这是一个你可以自己轻松解决的问题,甚至不用花那么长时间: 只需编造一些数据并使用这些数据进行测试即可 这并不像听起来那么难。例如,我在这里创建了
谢谢你的帮助 你没有说你用的是什么数据库(Postgresql、Mysql、Oracle等等),但是如果你用的是Mysql,你可以不使用数据库。不管怎样,四舍五入到整数,并且假设百分比始终在0到100之间,就可以了。您的问题似乎是没有任何测试数据,因此无法测试查询的语法。但这是一个你可以自己轻松解决的问题,甚至不用花那么长时间: 只需编造一些数据并使用这些数据进行测试即可 这并不像听起来那么难。例如,我在这里创建了两个投票,第一个有四票,第二个有两票。然后,我尝试使用您的查询将投票添加到投票1的选项1
UPDATE polls_options SET `votes`=`votes`+1, `percent`=ROUND((`votes`+1) / (SELECT voters FROM polls WHERE poll_id=? LIMIT 1) * 100,1)
WHERE option_id=?
AND poll_id=?
结果如下:
CREATE TABLE polls_options (
poll_id INT NOT NULL,
option_id INT NOT NULL,
votes INT NOT NULL,
percent FLOAT NOT NULL
);
INSERT INTO polls_options (poll_id, option_id, votes, percent) VALUES
(1, 1, 1, '25'),
(1, 2, 3, '75'),
(2, 1, 1, '50'),
(2, 2, 1, '50');
CREATE TABLE polls (poll_id INT NOT NULL, voters INT NOT NULL);
INSERT INTO polls (poll_id, voters) VALUES
(1, 4),
(2, 2);
UPDATE polls_options
SET votes = votes + 1,
percent = ROUND((votes + 1) / (SELECT voters FROM polls WHERE poll_id = 1 LIMIT 1) * 100,1)
WHERE option_id = 1
AND poll_id = 1;
SELECT * FROM polls_options;
您可以看到存在许多问题:
表尚未更新,因此poll 1的总票数是错误的(4而不是5)。请注意,您甚至不需要此表-它复制了在polls
表中已经找到的相同信息。让这两个表保持同步是额外的工作。如果出于某种原因需要调整结果,例如删除一些垃圾邮件投票,则必须记住更新两个表。这是不必要的额外工作和额外的错误来源polls\u options
- 即使您记得先更新
表,选项1的百分比仍然计算不正确:它被计算为3/5而不是2/5,因为它实际上是在进行此计算:投票
((投票+1)+1)
- 2的百分比未更新,导致轮询1的总百分比大于100
- 您甚至不应该将百分比存储在数据库中。而不是坚持这个值,只考虑在需要的时候计算它。
祝你好运 我觉得很奇怪。希望看到
投票
=投票
+1:(好的,但至少语法看起来很好吗?您的数据库服务器会告诉您语法是否有效。如果您甚至还没有数据,为什么还要麻烦编写update语句?请生成一些测试数据,遇到实际问题时返回。
poll_id option_id votes percent
1 1 2 75
1 2 3 75
2 1 1 50
2 2 1 50