Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
Mysql 对日期范围内的每个日期的行进行计数_Mysql_Sql_Database - Fatal编程技术网

Mysql 对日期范围内的每个日期的行进行计数

Mysql 对日期范围内的每个日期的行进行计数,mysql,sql,database,Mysql,Sql,Database,我一直在搜索Google,所以在过去的25分钟里,我一直在搜索如何在MySQL中执行以下操作 我目前有以下查询(由PHP发送): 我试图找到所有在开始日期和结束日期之间有收获日期的行,然后计算落在同一日期的行数。然而,我似乎没有得到任何结果。查询没有失败,只是没有返回任何内容。谁能给我指出正确的方向/告诉我哪里弄错了 编辑:找到问题。正如Michael在下面指出的,日期不是作为日期传递的,而是作为数字传递的。我通过在查询中添加“开始日期和结束日期之前和之后”来解决这个问题 MySQL希望日期文本

我一直在搜索Google,所以在过去的25分钟里,我一直在搜索如何在MySQL中执行以下操作

我目前有以下查询(由PHP发送):

我试图找到所有在开始日期和结束日期之间有收获日期的行,然后计算落在同一日期的行数。然而,我似乎没有得到任何结果。查询没有失败,只是没有返回任何内容。谁能给我指出正确的方向/告诉我哪里弄错了


编辑:找到问题。正如Michael在下面指出的,日期不是作为日期传递的,而是作为数字传递的。我通过在查询中添加“开始日期和结束日期之前和之后”来解决这个问题

MySQL希望日期文本是单引号字符串,如
'2012-01-01'
'2013-07-01'

由于您没有引用日期文字(它们是PHP变量),PHP实际上是在将它们传递到查询之前将它们解释为整数值的算术运算

// You see this:
$startDate = 2012-01-01
$endDate = 2013-07-01

// PHP does this:
// 2012 - 1 - 1 = 2010
$startDate = 2010
// 2013 - 7 - 1 = 2005
$endDate = 2005
您的查询最终使用以下内容:

WHERE
    `$db`.`crop`.`harvest_date` BETWEEN 2010 AND 2005
MySQL将把这两个整数都转换为
日期
,该日期将返回
NULL

mysql> SELECT CAST(2010 AS DATE);
+--------------------+
| CAST(2010 AS DATE) |
+--------------------+
| NULL               |
+--------------------+
因此,简单的解决方法是:

$startDate = '2012-01-01';
$endDate = '2013-07-01';

如果您最终将其转换为参数化查询,占位符的正确引用将为您处理。

MySQL希望日期文本为单引号字符串,如
'2012-01-01'
'2013-07-01'

由于您没有引用日期文字(它们是PHP变量),PHP实际上是在将它们传递到查询之前将它们解释为整数值的算术运算

// You see this:
$startDate = 2012-01-01
$endDate = 2013-07-01

// PHP does this:
// 2012 - 1 - 1 = 2010
$startDate = 2010
// 2013 - 7 - 1 = 2005
$endDate = 2005
您的查询最终使用以下内容:

WHERE
    `$db`.`crop`.`harvest_date` BETWEEN 2010 AND 2005
MySQL将把这两个整数都转换为
日期
,该日期将返回
NULL

mysql> SELECT CAST(2010 AS DATE);
+--------------------+
| CAST(2010 AS DATE) |
+--------------------+
| NULL               |
+--------------------+
因此,简单的解决方法是:

$startDate = '2012-01-01';
$endDate = '2013-07-01';

如果您最终将其转换为参数化查询,则占位符的正确引用将为您处理。

以获取给定日期范围之间的计数。将查询修改为

SELECT
   COUNT(`$db`.`crop`.`id`),
FROM
   `$db`.`crop`
WHERE
  `$db`.`crop`.`harvest_date` BETWEEN $startDate AND $endDate
将结果与“收获日期”分组将确定该特定日期的计数并将其分组

例如: 如果桌子像

8-21-2013

8-21-2013

8-20-2013

然后分组将给出

二,

一,

不分组


3获取给定日期范围之间的计数。将查询修改为

SELECT
   COUNT(`$db`.`crop`.`id`),
FROM
   `$db`.`crop`
WHERE
  `$db`.`crop`.`harvest_date` BETWEEN $startDate AND $endDate
将结果与“收获日期”分组将确定该特定日期的计数并将其分组

例如: 如果桌子像

8-21-2013

8-21-2013

8-20-2013

然后分组将给出

二,

一,

不分组


3

我知道这是一篇老文章,但这对我来说很有用

从订单表格中选择计数(*)、日期(LSTUPDTIM)、总和(TOTAL),其中LSTUPDTIM在“2018-01-20”和“2019-01-29”之间按日期分组(LSTUPDTIM)

,

我的LSTUPDTIM是一个时间戳,这就是我必须使用date()的原因 这给了我这样的输出

5 2019-01-25 500

2 2019-01-28 200


5 2019-01-29 500

我知道这是一个老帖子,但对我来说很有用

从订单表格中选择计数(*)、日期(LSTUPDTIM)、总和(TOTAL),其中LSTUPDTIM在“2018-01-20”和“2019-01-29”之间按日期分组(LSTUPDTIM)

,

我的LSTUPDTIM是一个时间戳,这就是我必须使用date()的原因 这给了我这样的输出

5 2019-01-25 500

2 2019-01-28 200


5 2019-01-29 500

查询应该失败。日期文字必须是单引号字符串。正如在
$startDate='2012-01-01'
中,当您按
收获日期进行分组时,您必须使用某种聚合函数(例如,
min()
max()
group\u concat()
)来表示
id
。哪种类型是
收获日期
?id的值是多少,既然几行应该被分组在一起(按收获日期),那么所有的行大概都有一个唯一的id?此查询没有多大意义。@AlmaDoMundo harvest\u date是一个日期查询应该失败。日期文字必须是单引号字符串。正如在
$startDate='2012-01-01'
中,当您按
收获日期进行分组时,您必须使用某种聚合函数(例如,
min()
max()
group\u concat()
)来表示
id
。哪种类型是
收获日期
?id的值是多少,既然几行应该被分组在一起(按收获日期),那么所有的行大概都有一个唯一的id?这个查询没有多大意义。@AlmaDoMundo harvest\u date是一个日期