![](/img/trans.png)
[英]Create a Laravel / PHP script that runs periodically e.g. every 1 week to update my MySQL database with calls to an api
[英]Best method for making a MySQL query dynamic (e.g., update query parameters to show Previous Week)
我有一個查詢,它按任務計算當前工作周的總工作時數:
SELECT name AS 'Task Name'
, sum(hours) AS `Total Hours`
FROM time_records
WHERE yearweek(record_date, 3) = yearweek(now(), 3)
GROUP BY
weekday(record_date), name
WHERE子句指定當前周:
WHERE yearweek(record_date, 3) = yearweek(now(), 3)
此數據使用MySQL查詢和PDO語句顯示為表。
我現在想通過單擊表格下的鏈接(例如,“上周”)為查看者添加一個選項,以查看前一周的數據。 為了顯示該數據,我需要更新WHERE子句以查詢前一周:
WHERE yearweek(record_date, 3) = yearweek(now(), 3) - 1
我想知道最好的方法是什么? 我寧願只保留整個查詢的一個版本。 一種想法是使用PHP在查詢中添加“ - 1”,例如:
WHERE yearweek(record_date, 3) = yearweek(now(), 3) <?php if (prev) {echo "- 1" ;} ?>
我認為這應該有效,但我怎樣才能確定現狀? 我應該將整個查詢放在一個函數中,以便默認情況下它可以是“Time_hours(0)”,對於之前的它可以是“Time_hours(1)” - 或者是否有更好的方法?
我擔心保持代碼可管理並遵循最佳實踐。 任何提示將不勝感激。 謝謝!
我建議您嘗試一個查詢,其中包含您要處理的周數之前的參數。 YEARWEEK是每周處理的糟糕選擇,因為它很難處理年終翻滾。
如果您的周數從周日開始,請嘗試這樣做。 這將是本周。
select r.record_id, r.record_date, w.week weekstart
from record r
join (
select
(FROM_DAYS(TO_DAYS(CURDATE()) -MOD(TO_DAYS(CURDATE()) -1, 7))
- interval 0 week) week
)w
where record_date >= w.week
and record_date < w.week + interval 1 week
小提琴: http ://sqlfiddle.com/#!2/4c487/1/0
如果你想要,比如說,一周前,在你的查詢中改變- interval 0 week
- interval 1 week
。 看到這個小提琴。 http://sqlfiddle.com/#!2/4c487/2/0
您可以在幾周之前放置一個任意數字,甚至是跨越年末的幾周。 例如,請參閱此處的interval -42 week
。 http://sqlfiddle.com/#!2/4c487/3/0
表達式FROM_DAYS(TO_DAYS(CURDATE()) -MOD(TO_DAYS(CURDATE()) -1, 7))
將當前日期向下FROM_DAYS(TO_DAYS(CURDATE()) -MOD(TO_DAYS(CURDATE()) -1, 7))
到上一個星期日。 如果要將其舍入到上一個星期一,請使用FROM_DAYS(TO_DAYS(CURDATE()) -MOD(TO_DAYS(CURDATE()) -2, 7))
。 例如: http : //sqlfiddle.com/#!2/4c487/8/0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.