Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据内容中的日期获取MySQL最后N周的行_Php_Mysql_Sql_Date - Fatal编程技术网

Php 根据内容中的日期获取MySQL最后N周的行

Php 根据内容中的日期获取MySQL最后N周的行,php,mysql,sql,date,Php,Mysql,Sql,Date,我想根据MySQL表行中的日期从表中获取前N周的数据 假设当前一周是第30周,我有第29、28、26和12周的数据行 如果我希望最后两周的行基于今天的日期,这很简单,但我希望它基于行上的时间戳 如果N=2,我想要第29周和第28周的所有行。如果N=3,我想要第29周、第28周和第26周,无论是哪一周,当我取的时候 我可以使用PHP和基于估计输出的猜测来实现这一点,但也许我可以利用一些MySQL功能。尝试类似的方法(代码未经测试): 基本上,只需使用DISTINCT关键字获取数据库中实际存在的周的

我想根据MySQL表行中的日期从表中获取前N周的数据

假设当前一周是第30周,我有第29、28、26和12周的数据行

如果我希望最后两周的行基于今天的日期,这很简单,但我希望它基于行上的时间戳

如果N=2,我想要第29周和第28周的所有行。如果N=3,我想要第29周、第28周和第26周,无论是哪一周,当我取的时候

我可以使用PHP和基于估计输出的猜测来实现这一点,但也许我可以利用一些MySQL功能。

尝试类似的方法(代码未经测试):

基本上,只需使用
DISTINCT
关键字获取数据库中实际存在的周的列表,然后使用
orderby。。。DESC LIMIT 3
获取最近三周的数据

我在子查询中这样做是为了让您可以在PHP中使用它作为一个调用,而不是调用数据库,在PHP中解析,然后重新提交,MySQL通常会以这种方式执行得更快。

尝试类似的方法(代码未经测试):

基本上,只需使用
DISTINCT
关键字获取数据库中实际存在的周的列表,然后使用
orderby。。。DESC LIMIT 3
获取最近三周的数据


我在子查询中这样做是为了让您可以在PHP中使用它作为一个调用,而不是调用数据库,在PHP中解析,然后重新提交,MySQL通常会以这种方式执行得更快。

一种方法是使用查询获得您想要返回的周数集,然后将该查询用作可以加入的内联视图

大概是这样的:

SELECT t.*
  FROM (SELECT s.week FROM tab s GROUP BY s.week ORDER BY s.week DESC LIMIT 3) r
  JOIN tab t
    ON t.week = r.week
内联视图(别名为
r
)获取表中N个最近一周值的列表。(这假设week列是可排序的,就像它是整数一样

它被连接到表,ON子句将表返回的行限制为周值与内联视图返回的值匹配的行

注意:
week
列上的索引可以为大量行提供显著的性能优势,并且
week
列上的基数较高

注意:对于大型表,执行联接操作与在(子查询)谓词中使用
之间可能存在性能差异,如下例所示。对于大多数大型集合和我执行的查询,我发现联接通常执行得更好。但您可能需要同时测试这两种操作,以查看哪种执行得更好。(在小表上,这两种方式都无关紧要;在真正大的表上,性能差异变得显著。)


一种方法是使用查询获取希望返回的周数集,然后将该查询用作可以加入的内联视图

大概是这样的:

SELECT t.*
  FROM (SELECT s.week FROM tab s GROUP BY s.week ORDER BY s.week DESC LIMIT 3) r
  JOIN tab t
    ON t.week = r.week
内联视图(别名为
r
)获取表中N个最近一周值的列表。(这假设week列是可排序的,就像它是整数一样

它被连接到表,ON子句将表返回的行限制为周值与内联视图返回的值匹配的行

注意:
week
列上的索引可以为大量行提供显著的性能优势,并且
week
列上的基数较高

注意:对于大型表,执行联接操作与在(子查询)
谓词中使用
之间可能存在性能差异,如下例所示。对于大多数大型集合和我执行的查询,我发现联接通常执行得更好。但您可能需要同时测试这两种操作,以查看哪种执行得更好。(在小表上,这两种方式都无关紧要;在真正大的表上,性能差异变得显著。)


类似于SELECT…,其中time>value1和time值1和时间<值2使用MySQL的限制来选择您需要的范围。因此,您实际上想要最后N行数据(恰好是在周内),不是最后N周的数据?我想要最后N周的数据,因为第29周可以包含12个条目,而第28周只能包含两个条目。
SELECT t.*
  FROM tab t
 WHERE t.week
    IN (SELECT s.week FROM tab s GROUP BY s.week ORDER BY s.week DESC LIMIT 3) r