需要建议生成数据表

时间:2013-11-19 15:00:30

标签: php sql doctrine-orm zend-framework2

在Zend框架中工作并使用Doctrine。

我有1场比赛,几场比赛一致(可能从4到50)。 这些比赛通常都有相同的球员。

我有桌子:
比赛
匹配
Matchresults
用户

第一步,让所有比赛属于比赛,这很容易,所以不用担心。 现在它变得棘手: 第二步,获得所有匹配的所有结果,仍然可以,我可以获得数据,但提供这些数据是具有挑战性的部分。 第三步,从users表中获取名称,其中users id等于matchresults表中给出的用户id。

最终结果应该是一个看起来像这样的表。

Name                   Match1   match2  match3 total points
firstname + lastname   50       60      61     171
firstname + lastname   52       56      66     174

我可以正确获取所有数据,但在正确的字段中获取所有数据有点问题。 任何人都可以指出我正确的方向或者给我一个例子吗?

干杯,

标记

编辑:澄清。 这是一场钓鱼比赛。 每场比赛都有一定数量的渔夫,根据他们捕获的内容获得积分。 日历年分为2或4个比赛,每年可以有所不同。 这些比赛有一个开始日期和结束日期,所有在比赛的开始日期和结束日期之间进行的比赛属于该比赛。

现在该应用的用户想要进行excell导出,以我上面显示的方式显示所有结果,匹配越多,包含点数的列越多。

1 个答案:

答案 0 :(得分:1)

您希望自己成为一个将竞争转化为用户列表及其结果的功能。类似的东西:

public function transform($competition)
{
    $users = array();

    $matches = $competition->getMatches();
    $matchCount = count($matches);
    $matchNum = 0;

    foreach($matches as $match)
    {
        $matchNum++;
        foreach($match->getResults() as $result)
        {
            $user = $result->getUser();
            $userId = $user->getId();

            // Add new user if necessary
            if (!isset($users[$userId]))
            {
                // Store the name
                $users[$userId]['name'] = $user->getFirstName() . ' ' . $user->getLastName();

                // Spot to store total points
                $users[$userId]['total'] = null;

                // Individual match results
                $users[$userId]['matches'] = array();

                // Spots for each match in case users skip a match
                for($i = 1; $i <= $matchCount; $i++) $users[$userId]['matches']['Match' . $i] = null;

            }
            $points = $result->getPoints();
            $users[$userId]['matches']['Match' . $matchNum] = $points;
            $users[$userId]['total'] += $points;
        }
    }
    // Use usort if you want to sort by names

    // Done
    var_dump($users);
    return $users;
}