所以,这是我的第一个问题在这里,我会很感激,如果有人可以帮助我。我现在有一个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
有这个使用条件聚集的解决方案......这将要求你写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
YEAR
,DAYOFMONTH
和MONTH
,它返回整数,而不是处理日期的格式化字符串表示input_date
和time_worked
属于表t_transactions
的假设。SELECT e.name
,这列需要出现在GROUP BY
子句中;非古代版本的MySQL,这是一个语法错误