php sql 报告显示同一个人 类

php sql report shows same person in all classes

我正在尝试制作一份报告,按日期显示每个 class 出席者的出席情况。

我的桌子只有一个人在一张 class。

但是我的 php sql 报告显示所有 class 都是同一个人。

表格 - attendant_record、_person、_person_group

<?php
$sql = 'SELECT * FROM _person, attendance_record, _person_group WHERE _person.id = attendance_record.personid ORDER BY 
attendance_record.date';
$query = mysqli_query($conn, $sql);
if (!$query) {
    die ('SQL Error: ' . mysqli_error($conn));
}
?>

<html>
<head>
    <title>Attendance Report</title>
</head>
<body>

<table>
    <caption class="title">Attendance Report</caption>
    <thead>
        <tr>
            <th>NO</th>
            <th>FirstName</th>
            <th>LastName</th>
            <th>Class</th>
            <th>Present</th>
            <th>DATE</th>
        </tr>
    </thead>
    <tbody>
    <?php
    $no = 1;
    while ($row = mysqli_fetch_array($query))
    {
        echo '<tr>
                  <td>'.$row['personid'].'</td>
                  <td>'.$row['first_name'].'</td>
                  <td>'.$row['last_name'].'</td>
                  <td>'.$row['name'].'</td>
                  <td>'.$row['present'].'</td>
                  <td>'. date('F d, Y', strtotime($row['date'])) . '</td></tr>
';
        $no++;
    }?>
    </tbody>
</table>
</body>
</html>

image of result page

您需要将 SQL 查询修改为 select 只有每个人的组。

$sql = 'SELECT * FROM _person, attendance_record, _person_group WHERE 
_person.id = attendance_record.personid 
 AND
_person.group_id = _person_group.group_id
ORDER BY 
attendance_record.date';

这将 select 仅记录组 table 中与每个人匹配的记录。 我假定列名 group_id 但您可以更改为您的列名。

编辑: 按日期过滤使用类似这样的方法(如果所有日期都相同,则不再需要按日期排序)。

$sql = 'SELECT * FROM _person, attendance_record, _person_group WHERE 
_person.id = attendance_record.personid 
 AND
_person.group_id = _person_group.group_id
 AND
_attendance_record.date = '2018-09-08';