[英]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.