【问题标题】:Monthly Leave Report of employees员工月休假报告
【发布时间】:2019-06-08 12:07:23
【问题描述】:

我有两个表,一个有员工姓名、员工 ID,另一个有 empid、Leave_Date、fromDate、toDate、Description 的表 tblleaves。

如果用户选择一天休假,则将日期值存储到 Leave_Date,如果用户选择多天,则存储从日期到日期的值。

现在我想要员工的月度报告。在此页面中,我想要员工姓名、休假天数和休假日期。我尝试了代码,但我反复得到员工姓名,因为他们在那个月申请了很多假,我想一次显示员工姓名。

<?php 


    if(isset($_POST['apply'])){

    $ym=$_POST['month'];
    list($Year, $Month) = explode("-", "$ym", 2);



     $sql = "SELECT distinct tblleaves.id as lid,tblemployees.FirstName,tblemployees.LastName,tblemployees.EmpId,
tblemployees.id,tblleaves.LeaveType,tblleaves.PostingDate,
tblleaves.Leave_Date from tblleaves join tblemployees on tblleaves.empid=tblemployees.id 
WHERE YEAR(Leave_Date) = 2019 AND MONTH(Leave_Date) = 6";
    echo $sql;
    $query = $dbh -> prepare($sql);
    $query->execute();
    $results=$query->fetchAll(PDO::FETCH_OBJ);

    $cnt=1;
    if($query->rowCount() > 0)
    {
    foreach($results as $result)
    {               ?>  
                                            <tr>
                                                <td> <?php echo htmlentities($cnt);?></td>



       <td><?php echo htmlentities($result->FirstName);?>&nbsp;<?php echo htmlentities($result->LastName);?></td>
                                               <td><?php ?></td>
                                             <td><?php $result->Leave_Date?></td>
                                             <?php $cnt++;}}}?>

我想要员工月假报告

employee name     Leave Days      Leave Dates 
KrishnanR            3              12-06-2019, 13-06-2019, 14-06-2019

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    确实,这种格式应该在报告本身中完成,方法是让每个员工出现一次并显示姓名,然后在带内显示该员工的所有记录。

    但是,您可以使用 MySQL 函数 GROUP_CONCAT() 获取包含您发布的示例结果的数据集。

    以下代码将为您提供三列,FirstName、LastName 和 leave_dates,每个员工一行。 leave_date 列将包含它们的所有tblleaves.Leave_Date 值,以逗号和空格分隔(或关键字SEPARATOR 之后出现的任何内容。

    你不需要 DISTINCT

    SELECT 
       tblemployees.FirstName,
       tblemployees.LastName,
       count(tblleaves.empid) as Leave_Days,
       GROUP_CONCAT( tblleaves.Leave_Date SEPARATOR ', ' ) AS leave_dates
    FROM
       tblleaves
       JOIN tblemployees
          ON tblleaves.empid = tblemployees.id
    WHERE YEAR(Leave_Date) = 2019
       AND MONTH(Leave_Date) = 6
    GROUP BY tblemployees.EmpId
    

    【讨论】:

    • html 表中没有显示 Leave_Date
    • 我只给了你生成你想要的东西的sql,而不是如何在你的报告中显示它。请参阅此 SQL 小提琴,因为它使用您的表 sqlfiddle.com/#!9/cb6e4c/2 可以正常工作(如果您以前没有使用过 SQLfiddle,请转到该链接,单击 Build Schema 以制作和填充表,然后单击 RunSQL 以查看它是否正常工作
    • 如果它仍然无法处理您的数据,请确保日期的保存方式使得 YEAR(Leave_Date) = 2019 AND MONTH(Leave_Date) = 6 有时实际上会返回 true
    • 如何获取休假天数
    • 使用 DAYNAME(date1) 函数。 (这里有好的 MySQL 教程w3resource.com/mysql/mysql-tutorials.php)。还有这里的 MySQL 文档dev.mysql.com/doc
    猜你喜欢
    • 2019-10-23
    • 1970-01-01
    • 2012-04-21
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多