【问题标题】:PHP Calculate total document saves per dayPHP计算每天的总文档保存
【发布时间】:2017-07-03 11:23:39
【问题描述】:

我正在尝试获取每天保存的文档总数。但我不知道怎么做。 这是我的数据库中的列及其数据。

report_id    doc_date   total_doc 
- 1          2017-06-06  1  
- 2          2017-06-23  1  
- 3          2017-06-14  1  
- 4          2017-06-12  1  
- 5          2017-06-16  1
- 6          2017-06-21  1
- 7          2017-06-14  1
- 9          2017-06-13  1
- 10         2017-06-21  1
- 11         2017-06-12  1
- 12         2017-06-18  1
- 13         2017-06-12  1
.....

上面有类似的日期,例如,

- 3          2017-06-14  1
- 7          2017-06-14  1 

我需要一个 sql 查询来计算并显示每天保存的文档总数。因此,对于 2017 年 6 月 14 日,总数为 2。 有什么想法吗? 仅供参考,total_doc 自动等于 1。 更新: 并显示当天保存的文档总数。

【问题讨论】:

  • 你尝试过什么吗?
  • 是的,但我总是出错,我不是 mysql 领域的专家。
  • 然后发布您的查询和错误。

标签: php mysql


【解决方案1】:
SELECT 
    doc_date,
    count(doc_date) AS saves
FROM documents
GROUP BY doc_date
ORDER BY doc_date ASC;

SELECT
    doc_date,
    sum(total_doc) AS saves
FROM documents
GROUP BY doc_date
ORDER BY doc_date ASC;

注意事项:

1) 如果您使用第一个选项,则可以删除列total_doc。这也是我的建议。 doc_date 列中的日期值的mysql格式很好,因此您可以对其进行可靠的操作。

2) 如果您愿意,可以按doc_date 对记录进行降序排序。

3) 不要忘记在使用 countsum 等函数时为列添加别名(就像我对 AS saves 所做的那样)。因为那时您也可以使用HAVING 过滤器。所以像这样 - 每天保存超过一次的所有文档:

SELECT 
    doc_date,
    count(doc_date) AS saves
FROM documents
GROUP BY doc_date
HAVING saves > 1
ORDER BY doc_date ASC;

然后您还可以在指定日期仅按一个已保存的文档进行过滤:

SELECT 
    doc_date,
    count(doc_date) AS saves
FROM documents
WHERE doc_date = "2017-06-12"
GROUP BY doc_date
HAVING saves > 1
ORDER BY doc_date ASC;

4) 或者,如果您愿意,也可以忽略 HAVINGdoc_date。这将为您提供指定日期保存的文档。

SELECT count(doc_date) AS saves
FROM documents
WHERE doc_date = "2017-06-12"
GROUP BY doc_date
ORDER BY doc_date ASC;

【讨论】:

    【解决方案2】:

    试试这个(将table_name设置为你的表名):

    SET @row_count = 0;
    SELECT (@row_count:=@row_count+1) AS totalSaves FROM table_name WHERE doc_date='2017-06-14'
    

    第一行定义了一个变量row_count,并将其设置为0

    第二行遍历数据库,查找日期为2017-06-14 的所有行,并为每一行增加row_count

    然后,我们将SELECT 存储在row_count 中的最终数字作为标记为totalSaves 的列中的单行。

    table_name 设置为您的表名

    【讨论】:

      【解决方案3】:
      SELECT doc_date, sum(total_doc) AS total 
      FROM table_name
      GROUP BY doc_date
      

      将 table_name 更改为您的表名。

      如果您只想显示 1 个日期:

      SELECT doc_date, sum(total_doc) AS total 
      FROM table_name
      WHERE doc_date = '2017-06-14'
      GROUP BY doc_date
      

      【讨论】:

        猜你喜欢
        • 2011-06-13
        • 1970-01-01
        • 2012-05-11
        • 2019-03-05
        • 1970-01-01
        • 2020-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多