php - 计算赞成票和反对票插件的计数

标签 php mysql sql

目前我的项目中有一个 jQuery upvote 插件。因此,每次我单击“upvote”时,它都会将数据库中的值保存为 true,每次收回投票时,都会将数据库中的值保存为 false,并将另一列中的值保存为 0。我想做的就是就像堆栈溢出一样计算总票数。即使现在我对如何解决这个问题仍然很困惑。我最终在 php 中编写了这段代码,这也使我的整个程序变慢:

$sample1 = $this->db->prepare("SELECT * from Ratings WHERE TopicID = :current");
$sample1->bindParam(':current', $id);
$sample1->execute();
$RES1 = $sample1->fetchAll(PDO::FETCH_ASSOC); 
$upVote = 0;

foreach ($RES1 as $mk){
     if(($mk['Upvote'] === 'true') && ($mk['Downvote'] ==='false')){
             $upVote++;
                                    }
     else if(( $mk['Upvote'] ==='false') && ($mk['Downvote'] === 'true')){
             $upVote--;
                                }
     else if(($mk['Upvote'] === 'false') && ($mk['Downvote'] === 'false')){
            $upVote--;
                                }
     else if(($mk['Downvote'] === 'false')){
             $upVote++;
                                }
     else if(($mk['Downvote'] === 'true') && ($mk['Upvote'] ==='0') || ($mk['Upvote'] === 'false')){
             $upVote--;
     }

 }

我的表结构: table

对于上面的例子,我的计数器应该是 0

最佳答案

我认为,通过更多的研究,您显示的决定向上或向下计数的条件可以大大简化。但是,这里有一个实现您的条件的 SQL 语句:

SELECT
    SUM(
        IF(Upvote='true' AND Downvote='false',1,
            IF(upvote='false' AND Downvote='true',-1,
                IF(Upvote='false' AND Downvote='false',-1,
                    IF(Downvote='false',1,
                        IF(Downvote='true' AND (Upvote='0' OR Upvote=false),-1,0)
                    )
                )
            )
        )) as `votes`
FROM Ratings
WHERE TopicD = :current

如果只计算“true”值,这可能会起作用:

SELECT
    SUM(IF(Upvote='true',1,0)) - SUM(IF(Downvote='true',1,0)) as `votes`
FROM Ratings
WHERE TopicD = :current

关于php - 计算赞成票和反对票插件的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49741485/

相关文章:

sql - 找到 X 行后如何停止在数据库中查找?

php - Doctrine - 使用 HAVING 子句时的 COUNT 行

php - 如何在php中显示行的多个值?

php - 必填字段缺少 json/android

PHP - 获取 MySQL 数据库中按序列化日期排序的行

sql - 使用 "Is Null"作为基于表单的条件

php - 如何使用此代码从数据库表中获取当前日期匹配记录

php - 调用缓存图像时哪个更有效/更快?

mysql - 聚合结果的 SQL 查询

mysql - 从 SQL Management Studio 到 RPI MySql