繁体   English   中英

如何检查表中是否已有名称? 查询Mysql每天的总和,然后通过PHP填充HTML数据

[英]How to check if name already in the table? Querying Mysql for sum of each day and then populating an HTML data through PHP with it

所以,这是我的第一个问题,如果有人能帮助我,我真的很感激。 我目前有一个Mysql数据库和一个用PHP制作的网络应用程序,用户可以输入他们当天在特定任务上使用了多少时间。

现在我想用几小时填充每天活动的SUM的HTML表格。 我的问题是我找不到检查名称字段是否唯一的方法,因为数据包含许多具有相同名称字段的行,每天一个。

我有这个Mysql查询:

SELECT 
    t_email.name, 
    DATE_FORMAT(input_date,'%d') AS days, 
    SUM(time_worked) AS totalTime
FROM 
    t_transactions 
    LEFT JOIN t_email ON t_transactions.email_id >= t_email.email_id 
WHERE 
    DATE_FORMAT(input_date,'%m') = '02'
    AND DATE_FORMAT(input_date,'%Y') = '2019' 
GROUP BY DATE_FORMAT(input_date,'%d') 
ORDER BY t_email.name

这给我一个像这样的表:

name  days  totalTime
james 01    5.00 
james 06    2.00 
jimmy 02    4.0

等等。 我正在使用以下PHP:

<?php 
foreach ($monthly_data_per_day as $row): ?>
<tr>
    <td><?= $row['name'] ?></td>
    <?php
    $num_days = date('t');
    for ($i = 1; $i <= $num_days; $i++) {
        if ($row['days'] == $i) {
            echo "<td>" . $row['totalTime'] . "</td>";
        } else {
            echo "<td>" . 0 . "</td>";
        }
    }?></tr>
<?php endforeach;?>

我想要一个HTML表格,在数据库中的每个名字之后,你可以看到那个人当天完成了多少小时。 所以列中从1到本月有多少天。

现在我每天都会得到一行,正确的时间总和就在一列上,因为每列有一行。

这是我想要的表格的图片:

桌子的图片与每月的每一天的列

有一个解决方案使用条件聚合...这将要求您编写31个CASE语句,如:

SELECT 
    e.name, 
    SUM(CASE WHEN DAYOFMONTH(t.input_date) = 1 THEN t.time_worked ELSE 0 END) AS day1,
    SUM(CASE WHEN DAYOFMONTH(t.input_date) = 2 THEN t.time_worked ELSE 0 END) AS day2,
    SUM(CASE WHEN DAYOFMONTH(t.input_date) = 3 THEN t.time_worked ELSE 0 END) AS day3,
    ...
FROM 
    t_transactions t
    LEFT JOIN t_email e ON t.email_id = e.email_id 
WHERE YEAR(input_date) = 2019 AND MONTH(t.input_date) = 2
GROUP BY e.name
ORDER BY e.name

其他评论:

  • 我猜你的意思是t.email_id = e.email_id而不是t.email_id >= e.email_id

  • 使用MySQL内置日期函数(例如YEARDAYOFMONTHMONTH )返回整数可能更有效,而不是操纵日期的格式化字符串表示

  • 由于查询中的所有字段都不是别名,我假设列input_datetime_worked属于表t_transactions

  • 因为我们SELECT e.name ,所以此列需要出现在GROUP BY子句中; 在非古代版本的MySQL上,这是一个语法错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM