如何在表中已检查的名字吗?查询MySQL的每一天的总和,然后通过PHP用它填充的HTML数据

问题描述 投票:3回答:1

所以,这是我的第一个问题在这里,我会很感激,如果有人可以帮助我。我现在有一个MySQL数据库和PHP与其中用户可以输入多少时间,他们都在一个特定的任务的那一天使用由一个Web应用程序。

现在我想填充一个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到多少天中有月。

现在,我得到一个排的每一天,随着时间的正确的和工作在刚一列,因为有每列一行。

下面是想我的表看起来像一个画面:

A picture of the table with columns for each day of the month

php mysql
1个回答
2
投票

有这个使用条件聚集的解决方案......这将要求你写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_idt.email_id >= e.email_id
  • 它可能会更有效地使用MySQL内置的日期功能,如YEARDAYOFMONTHMONTH,它返回整数,而不是处理日期的格式化字符串表示
  • 因为不是所有的在查询的字段被aliase,我做了列input_datetime_worked属于表t_transactions的假设。
  • 因为我们SELECT e.name,这列需要出现在GROUP BY子句中;非古代版本的MySQL,这是一个语法错误
© www.soinside.com 2019 - 2024. All rights reserved.