如何在列而不是行上建立循环?

时间:2013-06-27 02:42:06

标签: php mysql

我有一个锦标赛/阶梯脚本,数据库包含每个锦标赛的单独表格。对于锦标赛中的每一轮,都有一个“位置”和“得分”列。因此,例如,如果我正在进行三轮比赛,那么您将在该表中拥有以下列:

teamid
name
round1pos
round1score
round2pos
round2score
round3pos
round3score

现在,在管理控制面板中,我在“团队管理”部分中有以下代码,允许管理员在需要回退播放器或替代品或具有此类性质的情况下更改这些值:

        $stats2=mysql_query("SELECT * FROM tournament_$tournamentid WHERE teamid='$team2[id]'");
        $stats2=mysql_fetch_array($stats2);

        $tournament=mysql_query("SELECT * FROM tournaments WHERE id='$tournamentid'");
        $tournament=mysql_fetch_array($tournament);

        $team_stats="
        <div id='dashboard'>
            <h2 class='ico_mug'>" . LANG_MAN_TOURNAMENT_STATS . "</h2>
            <div class='clearfix'>
                <table class='ucp_fields' cellpadding='4' cellspacing='3' border='0' align='center' width='640px'>

                    <tr valign='top'>
                        <td align='center'>" . LANG_MAN_ROUND . " 1 " . LANG_MAN_POSITION . "</td>
                        <td class='alt1' align='center'>
                            <input type='text' name='team[round1pos]' value='$stats2[round1pos]' size='40' maxlength='5' />
                        </td>
                    </tr>

                    <tr valign='top'>
                        <td align='center'>" . LANG_MAN_ROUND . " 1 " . LANG_MAN_SCORE . "</td>
                        <td class='alt1' align='center'>
                            <input type='text' name='team[round1score]' value='$stats2[round1score]' size='40' maxlength='5' />
                        </td>
                    </tr>

                    <tr valign='top'>
                        <td align='center'>" . LANG_MAN_ROUND . " 2 " . LANG_MAN_POSITION . "</td>
                        <td class='alt1' align='center'><input type='text' name='team[round2pos]' value='$stats2[round2pos]' size='40' maxlength='5' />
                        </td>
                    </tr>

                    <tr valign='top'>
                        <td align='center'>" . LANG_MAN_ROUND . " 2 " . LANG_MAN_SCORE . "</td>
                        <td class='alt1' align='center'>
                            <input type='text' name='team[round2score]' value='$stats2[round2score]' size='40' maxlength='5' />
                        </td>
                    </tr>
                </table>
            </div>
        </div>";

现在显然我手动调用每个位置/得分......但我想要做的是为特定球队提供锦标赛中每一轮的位置和值。如果它是行,我会知道如何做到这一点,但它如何适用于列?由于每场比赛的轮数可能不同,我需要确保它只显示可用的字段。

2 个答案:

答案 0 :(得分:2)

以迂回的方式通过在数据库中保留列表来打破规范化。

你应该做什么有一个锦标赛表和另一个分数/位置表。

所以:

赛: tournament_id TOURNAMENT_NAME

队: TEAM_ID TEAM_NAME

成绩: TEAM_ID tournament_id ROUND_NUM round_score round_pos

因此,要获得特定锦标赛中特定团队的分数,请使用

SELECT * FROM scores WHERE team_id=TEAM_ID AND tournament_id=TOURNAMENT_NAME

通过这种方式,你不必处理为每场锦标赛创建新桌子的麻烦。

答案 1 :(得分:0)

好吧......所以这是我在经过一些试验和错误后最终得到的...完美的工作:) 那个人做了很多工作......

                $stats2=mysql_query("SELECT * FROM tournament_$tournamentid WHERE teamid='$team2[id]'");
                $stats2=mysql_fetch_array($stats2);

                $tournament=mysql_query("SELECT * FROM tournaments WHERE id='$tournamentid'");
                $tournament=mysql_fetch_array($tournament);

                $rchkpos = array();
                $rchkscore = array();

                for ($i=0; $i<=$tournament['numRounds']; $i++)
                {
                    $rchkthis = array("$i" => "round".$i."pos");
                    $rchkthis2 = array("$i" => "round".$i."pos");

                    $rchkpos = array_merge($rchkpos, $rchkthis);
                    $rchkscore = array_merge($rchkscore, $rchkthis2);

                    if ($rchkpos[$i] && $rchkpos[$i] != NULL && $i > 0)
                    {
                        $roundpos = $rchkpos[$i];
                        $roundscore = $rchkscore[$i];

                        $team_stats.="
                        <tr valign='top'>
                            <td align='center'>" . LANG_MAN_ROUND . " $i " . LANG_MAN_POSITION . "</td>     
                            <td class='alt1' align='center'>            
                                <input type='text' name='team[".$rchkpos[$i]."]' value='$stats2[$roundpos]' size='40' maxlength='5' />
                            </td>
                        </tr>

                        <tr valign='top'>
                            <td align='center'>" . LANG_MAN_ROUND . " $i " . LANG_MAN_SCORE . "</td>
                            <td class='alt1' align='center'>
                                <input type='text' name='team[".$rchkscore[$i]."]' value='$stats2[$roundscore]' size='40' maxlength='5' />
                            </td>
                        </tr>";
                    }
                }