【问题标题】:sql - count records per weeks using timestampsql - 使用时间戳计算每周记录数
【发布时间】:2015-10-30 01:41:11
【问题描述】:

我有一个名为“tasaciones”的表,它有 2 列“记录”和“fecha”(fecha 是时间戳)。

record  | fecha
-----------------------------

record1 | 2015-10-09 11:24:52

record1 | 2015-11-09 11:31:52

record2 | 2015-17-09 11:37:17

record3 | 2015-25-09 12:03:31

record3 | 2015-26-09 12:03:31

record4 | 2015-10-10 12:23:25

record4 | 2015-11-10 12:27:25

我需要通过从第一次记录之日到当前时间每周计算记录来制作每周报告。 我发现了类似的东西,但即使这是我需要的,我也不知道如何将“while”写入echo 数据。

SELECT year(fecha), datepart(week, fecha), count(*)
FROM tasaciones
GROUP BY year(fecha), datepart(week, fecha)

我想得到这样的结果:

第 1 周:15 条记录

第 2 周:10 条记录

第 3 周:25 条记录

第 4 周:25 条记录

【问题讨论】:

  • 您的查询结果是什么,您想要的结果是什么?
  • 我更新了我的问题,感谢关注
  • 我再次更新了我的问题
  • @JaniBolkvadze 我理解你的问题。您希望 php 代码打印查询返回的结果。
  • mysql中没有DATEPART

标签: php mysql sql


【解决方案1】:

MySQL 中没有DATEPART()。您可以使用YEARWEEK() 代替。所以你的查询应该是这样的。

SELECT count(*) as numRecords, YEARWEEK(fecha) as weekNum
FROM table
GROUP BY YEARWEEK(fecha)

回显结果取决于您使用的 api。

PDO:

$query = $SQL->prepare('...query here...');
$query->execute();

while ($row = $query->fetch(PDO::FETCH_ASSOC))
{
    echo $row['tags'];
}

MYSQLI:

$qry = '...query here...';
$results = $mysqli->query($qry);
while($row = $results->fetch_assoc()){
    echo $row['numRecords'], $row['weekNum']
}

注意:我没有发布使用 Mysql_ api 的方法,因为它已被弃用并且对 sql 无效注射以及许多其他问题。如果您还没有,您应该切换到 PDOMysqli_

【讨论】:

  • 您好,您的查询打印出 84 | 201540, 35 | 201541, 51 | 201542, 75 | 201543
  • 84 + 35 + 51 + 75的总和正好是表中记录的总和
  • @JaniBolkvadze 好的,有问题吗?
  • 第一条记录的时间戳是 28.08.2015 所以有超过 4 周
  • @JaniBolkvadze 没错!很高兴我能帮上忙:)还有什么问题可以随时问:)
【解决方案2】:

mysql 中没有DATEPART,请尝试使用week。不要在计数中不必要地使用*,它会减慢你的sql。

$query = "SELECT week(fecha) as w, count(record1) as cnt FROM tasaciones GROUP BY  week(fecha)";

    $res = $mysqli->query($query);
$table="<table><thead><th>WEEK</th><th>RECORDS</th></thead><tbody>";
    while ($results = $res->fetch_assoc()){
      $table .="<tr><td> Week:" . $results['w'] . "</td><td>" . $results['cnt'] . "records</td></tr>";
    }

 $table .="</tbody></table>";
echo $table;

【讨论】:

  • WEEK RECORDS 记录记录记录记录记录
  • 打印 4 行,没有数字
  • 周:40 84 条记录,周:41 35 条记录,周:42 51 条记录,周:43 75 条记录
  • @JaniBolkvadze 那么问题出在哪里。
  • 谢谢您,您的代码也有效,我已经接受了 John Ruddell 的回答,但您的代码也有效。再次感谢您的关注
【解决方案3】:

关于您问题的第一部分,您的查询应如下所示:

SELECT year(fecha), datepart('week',fecha), count(*)
FROM tasaciones
GROUP BY year(fecha), datepart('week',fecha)
WHERE fecha <= timestamp(now())

关于您问题的第二部分(即“如何编写 'while' 来回显数据”),我猜您的意思是如何在 PHP 中从查询中打印数据。因此,假设您使用的是 PDO:

$query = "SELECT year(fecha), datepart('week',fecha), count(*) FROM tasaciones GROUP BY year(fecha), datepart('week',fecha) WHERE fecha <= timestamp(now())";
$sql = $db->query($sql);
while ($results = $result->fetch()){
  echo $results[0] . ' ' . $results[1] . ' : ' . $results[2] . 'records.<br />';
}

【讨论】:

    【解决方案4】:

    下面是您问题的代码 sn-p。

    $sql = "SELECT year(fecha), datepart(week, fecha) as week, count(*) as week_total_record
    FROM tasaciones
    GROUP BY year(fecha), datepart(week, fecha)";
    
    $result = mysql_query($sql);
    
    while ($row = mysql_fetch_assoc($result)) {
       echo $row['week']." : ".$row['week_total_record'];
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      相关资源
      最近更新 更多