0

考虑下表:

CREATE TABLE `trans` (
  `transid` varchar(255) NOT NULL,
  `affid` varchar(255) NOT NULL,
  `timestamp` varchar(255) NOT NULL,
  UNIQUE KEY `transid` (`transid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

和 PHP 代码:

case "today":
    $sale=[];
    for ($i = 0 ; $i < 23 ; $i++) {
        $hours[]= $i;
        $clicks[$i]=$api["clicks"][$i];
    }    
    break;

我想将$sale今天每小时的销售计数添加到数组中。类似于:$hours[5] = select count(*) from trans where .. date 在今天的 04:59:59 - 06:00:00 之间。

4

2 回答 2

0

首先,如果您尝试为您的timestamp字段使用 unix 时间戳,请立即停止。你已经让你的生活变得痛苦了。使用 MySQL 时间戳字段。老实说,很少有使用 unix 时间戳字段是个好主意的用例。

如果你有一个时间戳字段,你可以做类似的事情

SELECT HOUR(`timestamp`) AS `hour`, SUM(`transid`) AS `transaction_count`
FROM trans
WHERE `timestamp` LIKE CONCAT(DATE(NOW()),'%')
GROUP BY `hour`
ORDER BY `hour` ASC

这将为您提供当天每个小时的销售量。确保添加索引以timestamp获得最佳查询性能。

如果您没有timestamp,那么您需要使用额外的FROM_UNIXTIME()转换,这将阻止您使用索引timestamp

于 2013-04-06T00:22:36.987 回答
0

像这样的东西:

<?php
$from=strtotime("".date("Y-m-d")." 04:59:59");
$to=strtotime("".date("Y-m-d")." 06:00:00");
?>

"SELECT * FROM `your_table` 
WHERE `date` > '".$from."' 
AND `date` < '".$to."'"

也许?

如果您gmdate()需要当前的 UTC 时间而不是使用date().

于 2013-04-06T00:16:29.743 回答