如何对两个循环使用一个查询

时间:2016-12-17 10:04:06

标签: php mysql sql for-loop while-loop

如何在这种情况下编写查询: 这是查询

$gdQuery = $conn->query("blah blah ");

我想将上述查询用于两次while循环。

  1. 是审核技能名称(姓名)
  2. 是retrivestudent name(student_fname)
  3. 这是一种正确的方法,如果不能我怎么做..?

    <table>
    <thead>
        <th>Paricipant</th> 
        <?php while($gdData = $gdQuery->fetch_assoc()) {  ?> 
        <th class="text-center"><?php echo $gdData['name']; ?></th> <?php } ?> 
        <th>Score</th> 
    </thead>
    <tbody>
        <tr>
            <?php while($gdData = $gdQuery->fetch_assoc()) {    ?>
            <td><?php echo  $gdData['student_fname']; ?></td> <?php }   ?> 
            <td style="line-height:45px">Score</td> 
        </tbody> 
    </table>
    
      

    我的问题是当我写第二个while循环不起作用时

4 个答案:

答案 0 :(得分:2)

fetch_assoc从查询结果中检索一行。您可以使用它,直到该结果集中的行用完为止。通过多次调用它,您将走向结果集的末尾。这就是为什么第二次循环没有任何关系的原因。 RTD http://php.net/manual/en/mysqli-result.fetch-assoc.php

在开始迭代之前使用fetch_all获取所有行并将它们存储在变量中。将该变量用于迭代。

或者,您可以尝试使用data_seek将结果集中的指针重置为first while循环后的开头。 http://php.net/manual/en/mysqli-result.data-seek.php

答案 1 :(得分:2)

我建议将数据检索与输出分开。

第一部分应检索表中的所有数据(namestudent_fname)并将其存储在两个数组中。

第二部分读取数组并生成html表。

这样你只需运行一次代价高昂的查询。

答案 2 :(得分:2)

使用PDOStatement::fetchAll()方法获取所有列和行。

然后,使用PDO::FETCH_ASSOC方法的$fetch_style PDOStatement::fetchAll()参数来获取关联数组。

$gdQuery = $conn->query('blah blah ');
$gdDatas = $gdQuery->fetchAll(PDO::FETCH_ASSOC);

然后,您将使用您的数据获得一个查询。然后,您可以关联地访问数据。

答案 3 :(得分:2)

如果你想在页面的两个地方使用相同的循环但想要获取不同的列名,那么这不是问题。

$gdQuery = $conn->query('blah blah ');
$gdDatas = $gdQuery->fetchAll(PDO::FETCH_ASSOC);

将此查询写在页面顶部,并在不同位置使用$ gdDatas。 或者,如果要在多个位置使用查询,请更改变量名称并使用它。