PHP第二个while循环在while循环中只运行一次

Posted

技术标签:

【中文标题】PHP第二个while循环在while循环中只运行一次【英文标题】:PHP 2nd while loop within a while loop only run once 【发布时间】:2016-08-31 09:10:33 【问题描述】:

在我的 php/mysql 编码方面需要一些专家帮助。我希望我的 while 循环检查每个块,并通过使用第二个 while 循环来完成它,从而在 1 行中回显同一块中的所有用户。我设法显示它,但它不会分别显示来自其他块的其他用户。

到目前为止,这是我的代码,不过我对 php 还是很陌生。

<html>
<head>
</head>
<body>
    <table border='1'>
        <th>Block</th>
        <th>company</th>
        <th>Username</th>
        <th>datetime</th>
    <?php
    require('db.php');


    $sql = "
    SELECT block_directories.block, event_details.username, event_details.datetime, event_details.eventDate, companies.company, event_details.tag
    FROM block_directories INNER JOIN event_details
    ON block_directories.block_id = event_details.tag
    INNER JOIN companies
    ON event_details.company=companies.company_id"
    ;
    $records=mysql_query($sql);

    $sqlblock = "
    SELECT * FROM block_directories"
    ;
    $blockrecords=mysql_query($sqlblock);

    //while loop to echo all blocks into table ina column
    while($blkrecords=mysql_fetch_assoc($blockrecords))    
        echo "<tr>";
        echo "<td>$blkrecords['block']</td>";

        //while loop to echo all users within the same block
        while($users=mysql_fetch_assoc($records))
            if($users['block']==$blkrecords['block'])
                echo "<td>$users['company']</td>";
                echo "<td>$users['username']</td>";
                echo "<td>$users['datetime']</td>";
            
        
        echo "</tr>";
    
    ?>
    </table>
</body>

Output Display of the code

【问题讨论】:

那是因为你在第一个外循环中内循环到 $records 记录集的末尾,但是在第二个外循环中,你已经在记录集的末尾,所以它赢了除非您使用 mysql_data_seek 倒回 $records 记录集,否则不会再次循环。 如果没有问题,请尝试使用mysqliPDOmysql 已弃用 【参考方案1】:

那是因为mysql_fetch_assoc() 在它的指针到达结果集的末尾后没有返回行。

您需要通过添加以下行将其重新指向结果集的第一个。

mysql_data_seek($records, 0);

所以你的循环代码是这样的,

while($blkrecords=mysql_fetch_assoc($blockrecords))    
        echo "<tr>";
        echo "<td>$blkrecords['block']</td>";

        //while loop to echo all users within the same block
        while($users=mysql_fetch_assoc($records))
            if($users['block']==$blkrecords['block'])
                echo "<td>$users['company']</td>";
                echo "<td>$users['username']</td>";
                echo "<td>$users['datetime']</td>";
            
        
        mysql_data_seek($records, 0);
        echo "</tr>";
    

mysql_* 扩展在 PHP 5.5.0 中被弃用,并在 PHP 7.0.0。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。

【讨论】:

以上是关于PHP第二个while循环在while循环中只运行一次的主要内容,如果未能解决你的问题,请参考以下文章

PHP——数组中的each(),list()和while循环遍历数组

在一个函数中以两个不同的while循环输入不起作用

带有MySql PDO的while循环内的while循环

如何在while循环中只打印一次帖子?

如何使用 tkinter 事件“继续”或暂停不同的 while 循环?

c_cpp leetcode 83.注意第二个while循环,它可能导致null ListNode结构,因此需要进行NULL检查。