因此,这是我的第一个题目,假若有人可以辅佐我,我将很是谢谢.我今朝有一个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 >行使MySQL内置的日期函数(譬喻YEAR,DAYOFMONTH和MONTH)也许会更有用,该函数会返回整数,而不是操纵日期的名目化字符串暗示情势 >因为并非查询中的全部字段都是别名,因此我假设input_date和time_worked列属于表t_transactions. >由于我们是SELECT e.name,以是此列必要呈此刻GROUP BY子句中;在非古代版本的MySQL上,这是语法错误
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|