如何比较多行值以获得百分比?

时间:2017-07-01 23:39:08

标签: php mysql database pdo

我正在申请中投票系统。每个成员加入一个组,然后该组可以从可用的组成员中选择一个获胜者。投票部分工作正常,但现在我需要比较每个成员输入的投票来获得一个百分比或找出投票是否一致,以便我可以从该信息中指定获胜者。我有一个小组表。

|groupID|winner|first|second|third|
|3445553|......|.....|......|.....|

我有会员桌。

|memberID|vwinner|vfirst|vsecond|vthird|
|12334334|.......|......|.......|......|

在我的测试组中,我有5名成员。我已经成功模拟了他们在数据库中填充这些字段的投票。进入该字段的值是另一个成员投票的成员的ID。

现在我需要查询数据库并检查每个成员投票并将其与其他成员进行比较,以获得所有相同投票的计数或查看投票是否一致。投票过程可以是多数规则,因此获胜者需要51%的投票,或者一致,因此获胜者需要100%的选票。逃避我的基本功能是如何写一个循环,无论是foreach还是同时遍历我从这个查询得到的数据数组

            $query="SELECT vwinner, vfirst, vsecond, vthird, vfourth FROM membership WHERE groupID = :groupID";
            $stmt=$this->db->prepare($query);
            $params = array(':groupID' => $groupID);
            $stmt->execute($params);
            $votes = $stmt->fetchALL();

比较价值观。最终,我需要它返回获得51%投票的成员的ID,另一个只是检查所有投票是否相同以获得一致投票。以下是我到目前为止所开始的一个示例。

public function countVotes($groupID,$payout)
{
    $query = "SELECT teams FROM groups WHERE groupID = :groupID";
    $stmt=$this->db->prepare($query);
    $params = array(':groupID' => $groupID);
    $stmt->execute($params);
    $result = $stmt->fetch();
    $teamnumber = $result->teams;

    $query = "SELECT voted FROM membership WHERE groupID = :groupID && voted=1";
    $stmt=$this->db->prepare($query);
    $params = array(':groupID' => $groupID);
    $stmt->execute($params);
    $results = $stmt->rowCount();

    if($teamnumber == $results)
    {
        if($payout == 'Majority Rule')
        {
            $query="SELECT vwinner, vfirst, vsecond, vthird, vfourth FROM membership WHERE groupID = :groupID";
            $stmt=$this->db->prepare($query);
            $params = array(':groupID' => $groupID);
            $stmt->execute($params);
            $votes = $stmt->fetchALL();
            foreach($votes as $vote)
            {
                $t1wv = $vote->vwinner;

            }
        }
        $query = "UPDATE groups
                  SET voting='0'
                  WHERE groupID = :groupID";
        $stmt=$this->db->prepare($query);
        $params = array(':groupID' => $groupID);
        $stmt->execute($params);
        return true;
    }
    else
    {
        return false;
    }
}

它检查组表以获得团队数量,然后将其与已投票的团队数量进行比较,如果它们相等则则运行比较投票的查询。我知道的那个foreach循环不起作用我刚刚开始编写它,看看我是否可以解决这个问题。下面的更新查询只需在计数完成后关闭投票。在运行之前会有更多的条件,但它是我最初测试之一的一部分。

我在这里做了一些搜索,但我似乎找不到类似的东西。这个查询将返回大量数据,我似乎无法了解如何正确地开始解析它。

我可以轻松编写一堆单独的查询,但当然效率低下。任何想法将不胜感激。提前谢谢。

按要求提供数据示例:

进入表格的日期类型和ID类似于

42b39d4c6d3f512c90cd2726da822117

看看桌子上有一些数据作为投票。

![数据库摘录] https://www.dropbox.com/s/7t8wnqc13vsbcwn/Untitled.png?dl=0

需要的样本结果:

|Place  |memberID|votes|
|vwinner|memberID| 2 |
|vwinner|memberID| 3 |
|vfirst |memberID| 3 |
|vfirst |memberID| 1 |
|vfirst |memberID| 1 |
|vsecond|memberID| 2 |
|vsecond|memberID| 3 |
|vthird |memberID| 4 |
|vthird |memberID| 1 |
|vfourth|memberID| 3 |
|vfourth|memberID| 2 |

因此,如果一位成员对一个地方进行投票,我需要知道该成员获得了多少票以及获得了哪些地方。

0 个答案:

没有答案
相关问题