gpt4 book ai didi

php - 使 MySQL 查询动态化的最佳方法(例如,更新查询参数以显示前一周)

转载 作者:行者123 更新时间:2023-11-29 05:33:17 26 4
gpt4 key购买 nike

我有一个查询,它按任务计算本周的总工作时数:

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" ;} ?>

我认为这应该可行,但我如何确定 prev 条件?我是否应该将整个查询放在一个函数中,以便默认情况下它可以是“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

fiddle :http://sqlfiddle.com/#!2/4c487/1/0

如果您想要,比方说,一周前,请将查询中的 - interval 0 week 更改为 - interval 1 week。看到这个 fiddle 。 http://sqlfiddle.com/#!2/4c487/2/0

您可以放置​​任意数量的周前,甚至是跨年结束的周。例如,请参阅此处的 interval -42 weekhttp://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()) -2, 7))。例如:http://sqlfiddle.com/#!2/4c487/8/0

关于php - 使 MySQL 查询动态化的最佳方法(例如,更新查询参数以显示前一周),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12902303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com