我试图查询我们的数据库以获取与用户定义的查询匹配的所有记录,并将数据存储在格式化的数组中。问题是,我得到了所有记录,但不确定如何正确处理数据。我已经在这方面工作了几天,在尝试了各种各样的想法之后,我们还没有取得多少进展。希望这里有人可以分享一些见解。
下面的代码执行查询并开始将返回的数据处理到数组中:
$msg_vol = array();
$xy_coords = array();
$tweet_count = 1;
$query = "SELECT created_at, tweet_id FROM `tweets` WHERE tweet_text LIKE '%{$safe_q}%' AND created_at < now() - 300";
$tweets = mysqli_query($db, $query);
confirm_query($tweets);
while ($tweet = mysqli_fetch_assoc($tweets)) {
$created_at = $tweet['created_at'];
$timestamp = strtotime($created_at);
$created_at_no_seconds = date('Y-m-d H:i', $timestamp);
if(!in_array($created_at_no_seconds, $xy_coords)) {
$created_at = $tweet['created_at'];
$timestamp = strtotime($created_at);
$created_at_no_seconds = date('Y-m-d H:i', $timestamp);
if(!in_array($created_at_no_seconds, $xy_coords)) {
$xy_coords = array(0 => $created_at_no_seconds, array('tweet_count' => $tweet_count, 'retweets' => 0));
} else {
// $created_at_no_seconds exists in array
// update array
$msg_vol[$created_at_no_seconds] = array('tweet_count' => $tweet_count++, 'retweets' => 0);
}
}
return $msg_vol;
我将$ created_at重新格式化为分钟,因为目前我只对最近5分钟(300秒)的数据感兴趣,并且希望每分钟分成一个&# 39;自己的关联数组。 $ created_at_no_seconds变量可能包含要添加到数组中的重复条目。所以,我玩弄了in_array()来尝试检查它是否存在,如果不存在则只将它添加到数组中。我还没有好运。
print_r($ msg_vol)提供以下输出(慢慢接近所需的输出):
[0] => Array
(
[created_at] => 2013-12-15 19:09
[tweet_count] => 1
[retweets] => 0
)
[2013-12-15 19:09] => Array
(
[tweet_count] => 11
[retweets] => 0
)
[1] => Array
(
[created_at] => 2013-12-15 19:09
[tweet_count] => 1
[retweets] => 0
...
[12] => Array
(
[created_at] => 2013-12-15 19:10
[0] => Array
(
[tweet_count] => 12
[retweets] => 0
)
)
[2013-12-15 19:10] => Array
(
[tweet_count] => 20
[retweets] => 0
)
[13] => Array
(
[created_at] => 2013-12-15 19:10
[0] => Array
(
[tweet_count] => 12
[retweets] => 0
)
)
...
(我现在没有处理转发,所以我只是在转发数组中添加0作为占位符)。
我试图对其进行格式化,以便在一个数组中,它包含tweet_count的值存储在其中的唯一日期(一直到分钟)。上面的例子以日期作为关联键,并且$ k =&gt; $ v inside是我想要实现的目标。但是,当我继续使用[0],[1]填充数组时。 [12],[13]等。
我甚至关闭了吗?这一直是兔子洞......而且,它开始变成一个黑暗而孤独的地方。 :(
答案 0 :(得分:0)
而不是像这样使用数组推送
array_push($msg_vol, $xy_coords);
为什么不试试
$array[] = $xy_coords;
关于重复项,为什么不在mysql查询中使用SELECT DISTINCT
?
答案 1 :(得分:0)
我能够通过优化查询来解决问题(谢谢#php)!
$query = "SELECT DATE_FORMAT(created_at, '%Y-%d-%m %H:%i'),";
$query .= " COUNT(tweet_id), 0 FROM `tweets`";
$query .= " WHERE tweet_text LIKE '%{$safe_q}%'" ;
$query .= " AND created_at < now() - 300";
$query .= " GROUP BY DATE_FORMAT(created_at, '%Y-%d-%m %H:%i')";
$tweets = mysqli_query($db, $query);
confirm_query($tweets);
while ($tweet = mysqli_fetch_assoc($tweets)) {
echo '<pre>';
print_r($tweet); exit;
echo '</pre>';
}
利用MySQL功能。他们是生命(和头发)的救星!