如何在PHP中多次使用mysqli结果行?

时间:2015-09-20 20:55:33

标签: php mysqli

我正在尝试整理一个工具,以帮助我即将到来的幻想曲棍球草案,同时也学习PHP。我试图在一个页面上创建多个列表,一个显示前10个可用的整体玩家,然后是其他按位置显示前十个可用玩家的列表。

这是我的SQL查询/代码

include 'db/connect.php';

$sql='SELECT * FROM players WHERE pick IS NULL';

$players=$conn->query($sql);

if($players === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->error, E_USER_ERROR);
} else {
    $rows_returned = $players->num_rows;
} 

然后在页面后面我有一个while循环,它生成一个包含前十名玩家的表

while ($row = $players->fetch_array()) {
    if ($i == 10) {
        break;
    }

    echo "<tr>";
    echo "<td>" . $row['Rank'] . "</td>";
    echo "<td>" . $row['Player'] . "</td>";
    echo "<td>" . $row['Team'] . "</td>";
    ...

一切正常。但是,当我使用相同的方法生成仅包含特定位置(C,RW / LW等等)的列表时,它会从前10名玩家列表结束的位置开始。 (请参阅我的意思:http://i.imgur.com/JApeftU.png

我认为这与$players->fetch_array()有关但是我不知道绕过它最好的方法是什么。

有什么想法吗? 谢谢!

2 个答案:

答案 0 :(得分:6)

与所有玩家一起填充行。

while ($row = $players->fetch_array()) {   //→ $rows = $players->fetch_all();
    $rows[] = $row;
}

您可以使用count()来获取数组中玩家的总数

$totalPlayers = count($rows);

现在您可以使用for循环遍历数组

for($i = 0; $i < $totalPlayers; $i++){
    //echo out the stuff you want
    echo $rows[$i]['player'];
}

或者只有十个

for($i = 0; $i < 10; $i++){
    //echo out the stuff you want
    echo $rows[$i]['player'];
}

答案 1 :(得分:0)

嗯,对于未来的游客,被误导性的标题所吸引,另一个答案是可以的。

虽然对你个人而言,另一个答案以及你的问题是错误的。

首先,您对使用数据库的想法是错误的。

数据库不像文本文件,但您必须每次从第一行到最后一行读取。数据库非常智能,旨在为您返回所请求的数据。

以这种方式思考:如果你的联盟将成长为雇佣数千名球员,那该怎么办?当它只需要一百个玩家时,它会给PHP脚本带来许多无用的信息。

因此,您似乎需要不同的查询来获取不同的数据集。首先,您需要一个查询

brew install git

要获得前十名,SELECT * FROM players WHERE pick IS NULL ORDER BY field DESC LIMIT 10 是您用来确定&#34; top&#34;播放器。然后是几个查询,每个查询都会让玩家获得某个位置。

field