假设我有一个如下所示的数据库结构:
的学生
+--------------+--------------------+-------------------+
| student_id | student_firstname | student_lastname |
+--------------+--------------------+-------------------+
| 1 | John | Doe |
+--------------+--------------------+-------------------+
| 2 | Lisa | Doe |
+--------------+--------------------+-------------------+
| 3 | Derp | Doe |
+--------------+--------------------+-------------------+
缺失
+--------------+--------------------+-------------------+---------------+
| absence_id | absence_student_id | absence_date | absence_note |
+--------------+--------------------+-------------------+---------------+
| 1 | 2 | 2012-06-10 | A note... |
+--------------+--------------------+-------------------+---------------+
| 2 | 3 | 2012-06-30 | Another note. |
+--------------+--------------------+-------------------+---------------+
列students.student_id
和absence.absence_student_id
在PHP中,我想遍历上面的表并获得students
中行的完整输出,如果absence
中有与该学生匹配的记录,请对该行执行某些操作,然后继续循环。
我想要的HTML输出将是这样的:
<table>
<thead>
<tr>
<td>Name:</td>
<td>Absence date:</td>
<td>Absence note:</td>
</tr>
</thead>
<tr>
<td>John Doe</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Lisa Doe</td>
<td>2012-06-10</td>
<td>A note...</td>
</tr>
<tr>
<td>Derp Doe</td>
<td>2012-06-30</td>
<td>Another note.</td>
</tr>
</table>
我用这样循环:
<?php
while ($row = mysql_fetch_array($students_sql_query)) {
echo "<tr><td>".$row['student_firstname']."</td></tr>";
}
?>
是否可以为此添加某种if
语句?我需要两个不同的MySQL
查询和某种foreach
循环吗?我对网络编程比较陌生......提前感谢,感谢很长时间。
答案 0 :(得分:3)
您需要在查询中加入表格,然后从查询中获取结果。
SELECT Students.student_firstname
, Students.student_lastname
, Absence.absence_date
, Absence.absence_note
FROM Students
LEFT JOIN Absence ON Students.id = Absence.absence_student_id
然后你应该能够循环遍历它:
<?php
while ($row = mysql_fetch_array($students_sql_query))
{
?>
<tr>
<td>$row['student_firstname']</td>
<td>$row['student_lastname']</td>
<td>$row['absence_date']</td>
<td>$row['absence_note']</td>
</tr>
<?
}
?>
左连接将告诉数据库拉入所有学生,如果他们有缺席,它也会填充。如果学生没有缺席,那么将从数据库返回null。当它显示在循环中的表行中时,如果该学生的缺席表中没有任何内容,则它应显示为空列。
唯一的缺点是,如果学生多次缺席,它将在显示表中复制行。在这种情况下,您必须在代码或显示中进行一些预处理以处理该情况。
答案 1 :(得分:0)
使用pdo如下:
$sql = $dbh->prepare('
SELECT student_firstname, student_lastname, absense_date, absense_note
FROM students s inner join absense a
ON s.student_id=a.absense_student_id
');
$sql->execute();
$result = $sql->fetchAll(); <----- fetch All the data
return $result;
foreach($result as $row)
{
echo '<tr>';
echo '<td>'.$row['student_firstname'].' '.$row['student_lastname'].'</td>';
echo '<td>'.$row['absense_date'].'</td>';
echo '<td>'.$row['absense_note'].'</td>';
echo '</tr>';
}