为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用php从具有多个表的mysql数据库中检索大量数据

如何使用php从具有多个表的mysql数据库中检索大量数据

PHP
偶然的你 2022-08-19 10:25:45
我需要特定部门的每月出勤报告。在我的过程中,它将需要更多的时间来生成。如果员工人数超过50人,则根本不会生成报告。我有两个表,一个是员工表,另一个是出勤表。我正在生成这样的报告。这是我的代码。<div class="row">    <div class="col-md-12">           <table style="width:100%;" border="1">                                            <tr style="font-weight: bold; background-color: #D3D3D3; text-align: center;">                <td style="text-align: center;padding: 5px;">SLNo.                </td>                   <td>EMPID</td>                <td style="width:250px; text-align: center; padding-left: 5px; padding-right: 5px;">                    Employee&nbsp;Name                </td>                <?php                /* Default Date Indexing starts here. */                $timezone = "Asia/Calcutta";                date_default_timezone_set($timezone);                $timestamp = mktime(0,0,0,$Month,1,$Year);                $maxday = date("t",$timestamp);                //echo "<td></td>";                for ($k=1; $k<= $maxday; $k++) {                      $kv = sprintf('%02d', $k);                    echo "<td style=''>$kv</td>";                  }                /* Default Date Indexing ends here. */                ?>                <td>TOT.P</td>                <td>TOT.HLF</td>                <td>TOT.A</td>                <td>TOT.WO</td>                <td>TOT.HLD</td>            </tr>            <?php            //Getting all employee details according roster assign table.            $sqlRA = "SELECT * from employee_details where DivisionDbKey = '$DivisionDbKey' and Status='ACTIVE' ORDER BY EmployeeName ASC";            $resultRA = mysqli_query($conn, $sqlRA);            $i = 1;请指导我该怎么做,以便我能够快速获得更多的员工数据。我必须一次展示1000名员工的记录。
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

您应该联接表并对所有员工和一个月中的所有天执行单个查询,而不是为每个员工和日期执行单独的查询。


SELECT e.EmployeeId, e.EmployeeName, a.Date, a.Attendance

FROM employee_details AS e

JOIN employee_attendance AS a ON a.EmployeeDbKey = e.DbKey

WHERE e.DivisionDbKey = '$DivisionDbKey' and e.Status='ACTIVE'

AND a.Date BETWEEN '$Year-$Month-01' AND LAST_DAY('$Year-$Month-01') and a.Status='ACTIVE'

ORDER BY e.EmployeeName, a.Date

然后,当您显示表格时,请随时更改时启动一个新的表格。<tr>$row['EmployeeId']


此外,当您为员工循环访问当月的日期时,请从当前日期中减去上一个日期。如果差值大于 1,则在行中插入列以显示缺失。$difference - 1<td>A</td>


或者,请参阅从日期范围生成天数。可以使用这些技术之一创建生成月份中所有日期的子查询。左边用这个连接表,你会得到每天的行,但如果它们不存在,你会得到行。employee_attendancea.AttendanceNULL


查看完整回答
反对 回复 2022-08-19
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信