Mysql和PHP基于时间的频率

时间:2015-01-08 17:43:40

标签: php mysql

我正在制作一个项目来绘制一段时间内的频率。服务器当前存储除计数之外我需要的所有数据,因为这将随着时间的推移而变化。我正在使用以下代码提取所需的所有数据:

<?php
$con = mysql_connect("127.0.0.1",xxx,xxx);
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("tweets", $con);
$results = array();

$result = mysql_query("SELECT company, time FROM data WHERE company = 'AAPL'");

while($row = mysql_fetch_array($result))
{
    $results[] = $row;
}

$results = json_encode($results);
mysql_close($con);
echo $results;
?>

返回时,我有一个包含所有公司名称和时间的数组。我将如何计算一个时间范围内的频率,例如过去24小时内的频率,然后是前24小时的单独值?

2 个答案:

答案 0 :(得分:0)

您只需遍历数据,具体代码取决于时间格式和所需结果的格式。你可以这样做:

$summary =array();
foreach($results as $result)
{
    $day = substring($result['time'], 0, 10);
    if(isset($summary[$day])){
        $summary[$day]++;
    } else {
        $summary[$day] = 1;
    }
}

根据时间格式编写函数getDay()。

答案 1 :(得分:0)

如果您的日期/时间值存储为MySQL日期时间(并且为了您的利益,我希望它们是),那么解决方案是微不足道的。选择特定时间段内的记录并按公司分组,例如

SELECT 
    `company`, COUNT(`company`) AS total 
FROM 
    `data` 
WHERE 
    `time` >= now() - INTERVAL 1 DAY 
GROUP BY 
    company

在这个例子中,我使用MySQL来计算24小时的时间段,但你可以很容易地让PHP计算确切的时间/日期。

如果您想要一个纯PHP解决方案,那么首先将您按公司分组的时间存储在一个多维数组中。将您的时间从数据库格式转换为Unix时间。在我的例子中,我使用strtotime();如果你的db时间是一个时髦的格式,那么你需要做一些其他事情来转换它们。

$result = mysql_query("SELECT company, time FROM data");
while($row = mysql_fetch_array($result)) {
    $results[$row['company']] = strtotime($row['time']);
}

然后简单地循环数组并进行评估。

// 24 hours before now
$start = time() - ( 24*60*60);
$lastTwentyFourHours = array();
foreach ( $results as $company => $times ) {
    if ( !isset($lastTwentyFourHours[$company]) ) {
        $lastTwentyFourHours[$company] = 0;
    }
    foreach ( $times as $time ) {
        if ( $time >= $start ) {
            $lastTwentyFourHours[$company]++;
        }
    }
}
print_r($lastTwentyFourHours);