Php 嵌套的While循环仅显示第一行数据

Php 嵌套的While循环仅显示第一行数据,php,mysql,Php,Mysql,我是一名PHP新手,在理解“嵌套”的概念时遇到了问题。当我运行以下代码时,它将显示表中$query3(FirstName、LastName等)中列出的所有人,但是当它显示第二个和第三个while循环(分别使用$query1和$query2)时,它只对第一条记录(列出的第一个员工)执行此操作,而不对其他记录执行此操作。我是否需要/如何为循环的每个实例重置$employeeID变量,或者我到底需要在哪里进行更改 //pen some querying $query1 = mysql_query("S

我是一名PHP新手,在理解“嵌套”的概念时遇到了问题。当我运行以下代码时,它将显示表中$query3(FirstName、LastName等)中列出的所有人,但是当它显示第二个和第三个while循环(分别使用$query1和$query2)时,它只对第一条记录(列出的第一个员工)执行此操作,而不对其他记录执行此操作。我是否需要/如何为循环的每个实例重置$employeeID变量,或者我到底需要在哪里进行更改

//pen some querying
$query1 = mysql_query("SELECT * FROM employees WHERE position='Supervisor' OR position='Area Manager' ORDER BY area, LastName, EmployeeNumber ");
$query2 = mysql_query("SELECT * FROM meetings WHERE meetingGroup='Management'");


//now write some wicked sick code that will change the world!
while($rows3 = mysql_fetch_array($query1)):
    $firstname = $rows3['FirstName'];
    $lasttname = $rows3['LastName'];
    $area = $rows3['area'];
    $employeeID = $rows3['EmployeeNumber'];

echo "<table border='1' align='center' width='75%'><tr><td width='25%'>$firstname $lasttname</td>";

        while($rows1 = mysql_fetch_array($query2)):
            $meetingID = $rows1['meetingID'];
            $meetingName = $rows1['meetingName'];

            echo "<td width='19%'>$meetingName</td>";

            $query3 = mysql_query("SELECT * FROM meetingattendance WHERE employeeid='$employeeID' AND meetingid='$meetingID'");
            while($rows2 = mysql_fetch_array($query3)):
                $attendanceMark = $rows2['employeeattendance'];
                if($attendanceMark = 1)
                    echo "<td><center><strong>X</strong></center></td>";
                else
                echo "No Record";
            endwhile;


        endwhile;

endwhile;
?>
//打开一些查询
$query1=mysql_query(“按区域、姓氏、员工编号从position='Supervisor'或position='Area Manager'排序的员工中选择*);
$query2=mysql\u query(“从meetingGroup='Management'所在的会议中选择*);
//现在写一些邪恶的病态代码,将改变世界!
而($rows3=mysql\u fetch\u数组($query1)):
$firstname=$rows3['firstname'];
$lasttname=$rows3['LastName'];
$area=$rows3['area'];
$employeeID=$rows3['EmployeeNumber'];
回显“$firstname$lasttname”;
而($rows1=mysql\u fetch\u数组($query2)):
$meetingID=$rows1['meetingID'];
$meetingName=$rows1['meetingName'];
回显“$meetingName”;
$query3=mysql_query(“从MeetingAttention中选择*,其中employeeid='$employeeid'和meetingid='$meetingid'”);
而($rows2=mysql\u fetch\u数组($query3)):
$attendanceMark=$rows2['EmployeeAttention'];
如果($attendanceMark=1)
回声“X”;
其他的
回声“无记录”;
结束时;
结束时;
结束时;
?>

让我们从嵌套循环开始。我将在这里给出一个例子,它将跳过查询,使之更容易理解

<?php
$nested1 = array(10,11,12,13,14,15,16,17);
$nested2 = array(20,21,22,23,24,25,26,27);
$nested3 = array(30,31,32,33,34,35,36,37);

while ($rows3 = next($nested1)) {
  echo "First Level: $rows3\n";

  while ($rows1 = next($nested2)) {
    echo " -- Second Level: $rows1\n";

    while ($rows2 = next($nested3)) {
      echo " -- -- Third Level: $rows2\n";
    }
  }
}
原因是我们在本例中使用next,它将内部指针移动到数组中的下一个元素。由于指针在下一次通过外部循环时不会重置,因此我们将点击回显“第一级:$rows\n”;行,然后是下一个while循环。由于指针仍在数组的末尾,next()将失败并继续执行迭代的其余部分。这与最内部的循环($rows2)相同

我接下来在本例中使用的原因是,它的作用与查询中使用的mysql_fetch_数组函数类似,它将到达结果集的末尾,指针永远不会重置回开头

尽管如此,您确实应该考虑在查询中使用连接。特别是从一个左连接开始,如下所示

SELECT * FROM employees as e
LEFT JOIN meetingattendance as m ON e.EmployeeNumber = m.employeeid
WHERE e.position='Supervisor' OR e.position='Area Manager' 
ORDER BY e.area, e.LastName, e.EmployeeNumber

从这里开始,看看这是否能让你更接近你想要的东西。

为什么不在一个sql查询中,而不是在这些while循环中,对三个表
employees
meetings
meetingAttentication
进行排序?请发布三个表的结构,并解释您试图实现的目标。您可以将至少两个(如果不是全部)三个查询与一个连接和一个循环结合起来?它将远不那么复杂,占用更少的内存。是否出现了此选项?谢谢!新手的堕落,你只是不知道所有的好东西!我将尝试使用连接,我敢说这可能会让我省去一个巨大的头痛。非常感谢。
SELECT * FROM employees as e
LEFT JOIN meetingattendance as m ON e.EmployeeNumber = m.employeeid
WHERE e.position='Supervisor' OR e.position='Area Manager' 
ORDER BY e.area, e.LastName, e.EmployeeNumber