在联赛表中对各行进行编号

时间:2014-02-13 15:38:35

标签: php mysql rows

我在mysql数据库中有当前最新的高级联赛表。我已经使用 foreach 循环将它们从数据库中拉出来,以准确显示它们我想要的方式,我无法解决的是如何显示团队的位置。所以在联盟顶端的球队,我希望在表格排中显示第1名,对于第10名的球队,我希望能够在第19名,19名球队中展示10名球队......我似乎无法找出如何做到这一点。我认为它与COUNT函数有关,但我似乎无法找到任何我理解的东西!

以下是我的测试页上的代码

<?php
$prem = prem_table();
?>
<table>
<th>POS</th>
<th>TEAM</th>
<th>PLD</th>
<th>GD</th>
<th>PTS</th>
<?php
foreach ($prem as $table) {
$team = $table['team'];
$pld = $table['pld'];
$win = $table['win'];
$draw = $table['draw'];
$loss = $table['loss'];
$gd = $table['gd'];
$pts = $table['points'];

?>
<tr>
<td>X</td><!-- This number needs to change to equal the position the team is in -->
<td><?php echo $team ;?></td>
<td><?php echo $pld ;?></td>
<td><?php echo $gd ;?></td>
<td><?php echo $pts ;?></td>
</tr>


<?php   
}
?>
</table>

这是我用来从数据库中获取表格的函数

function prem_table() {
$sql = "SELECT * 
        FROM  `premier_league` 
        ORDER BY  `points` DESC ,  `goal_difference` DESC ,  `for`";

$result = mysql_query($sql) or die(mysql_error());

$prem = array();

while (($row = mysql_fetch_array($result)) !== false) {
    $prem[] = array(
                    'id' => $row['id'],
                    'team' => $row['team'],
                    'pld' => $row['pld'],
                    'win' => $row['win'],
                    'draw' => $row['draw'],
                    'loss' => $row['loss'],
                    'for' => $row['for'],
                    'against' => $row['against'],
                    'gd' => $row['goal_difference'],
                    'points' => $row['points'],
                    );
}

return $prem;
}

2 个答案:

答案 0 :(得分:0)

我不会对MySQL中的行进行编号,因为MySQL会存储数据,您需要编号才能进行演示。您可以使用类似

的行对行进行编号
$rows = retrieveData(); // somehow retrieve data from storage
$rowNumber = 0;

foreach ($rows as $currentRow) {
    $rowNumber++;
    // output your data here. Current row number is in $rowNumber.
}

答案 1 :(得分:0)

Microsoft SQL服务器具有ROW_NUMBER()函数,该函数将对行进行编号,遗憾的是MySQL没有这样的功能。

但是,您可以使用LIMIT x,y

来完成此操作

例如找到第一支队伍:

SELECT xxx FROM table
LIMIT 1,1

和第19支队伍:

SELECT xxx FROM table
LIMIT 19,1

为了确保始终获得正确的位置,您还需要使用ORDER BY来确保您的行在服务器中正确排序。

同样值得一提的是,MySQL仍然会选择所有数据,但只返回你通过LIMIT指定的内容,这对于一个英超表不会有问题,但是一个非常大的表可能会导致表现受到打击。

修改

正如下面的评论所指出的,OP已经更新,以包含更多信息。在回答问题时,尚不清楚他们是否已经拥有所有数据,只需要在循环中需要一个简单的递增值,或者想要查询数据库中的特定药水。我的回答清楚地回答了后者,这实际上并不是OP想要的。我会在这里留下这个答案,因为它可能在将来帮助其他人。