[英]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内置日期函数(例如YEAR
, DAYOFMONTH
和MONTH
)返回整数可能更有效,而不是操纵日期的格式化字符串表示
由于查询中的所有字段都不是别名,我假设列input_date
和time_worked
属于表t_transactions
。
因为我们SELECT e.name
,所以此列需要出现在GROUP BY
子句中; 在非古代版本的MySQL上,这是一个语法错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.