将多个查询结果集中的数据分组,形成嵌套的关联级别

问题描述 投票:0回答:1

我需要的是获取问题 ID 并按小时跟踪用户提交的赞成票。当我尝试从数组中连贯地获取数据以用于 PHPExcel 图表时,我遇到了困难。

我最终得到这个 $hourlyUpvotesTodayResult[] 数组,它每小时都有正确的票数(通过 print_r 验证),但我想以这样的方式对它们进行分组,我可以执行类似“对于每个问题 id 显示”的操作0-24小时以及每个小时的总票数”。也许我想太多了,错过了一些简单的事情。

另外,请忽略古老的 MySQL - 我正在处理一些现有代码,我知道它已被弃用,有一天我会抽出时间来更新它:D

while ($todayInfoRow = mysql_fetch_array($todayInfoQuery))
    {
    $issue_entry_id_today = array($todayInfoRow['issue_entry_id']);
    foreach ($issue_entry_id_today as $issue_entry_id_today)
        {
        $todayInfoUpvotes = "SELECT id from $db.$tb2 WHERE date = '".$date."' and issue_entry_id = '".$issue_entry_id_today."' ORDER BY issue_entry_id DESC";
        $todayInfoUpvotesQuery = mysql_query($todayInfoUpvotes)or die(mysql_error());
        $todayInfoUpvotesRow = mysql_num_rows($todayInfoUpvotesQuery);
        $todayInfoResult = array($issue_entry_id_today, $todayInfoUpvotesRow);
        }
    // get votes for individual hours for today 
    for ($hour_today=0; $hour_today<25; $hour_today++)
        {
            $hourlyUpvotesToday = "SELECT id from $db.$tb2 WHERE date = '".mysql_real_escape_string($date)."' AND issue_entry_id = '".$issue_entry_id_today."' AND hour = '".$hour_today."' ORDER BY issue_entry_id DESC";
            $hourlyUpvotesTodayQuery = mysql_query($hourlyUpvotesToday)or die(mysql_error());
            $hourlyUpvotesTodayRow = mysql_num_rows($hourlyUpvotesTodayQuery);
            $hourlyUpvotesTodayResult[] = array('id'=>$issue_entry_id_today, 'upvotes'=>$hourlyUpvotesTodayRow, 'hour'=>$hour);
        } 
    }
//debug print array
print_r($hourlyUpvotesTodayResult);
php arrays multidimensional-array grouping resultset
1个回答
1
投票

您的代码创建带有一些额外信息的数组。 而不是制作一个数组:

小时数

身份证号码

小时

投票

您将做出一个结果:

身份证号码

[小时] -> 投票

这次,ID # 将成为关键,您的小时数将是 X 值,您的投票数将是 Y 值(参考基本的 X-Y 轴图表)。 您的数组将更改为:

$hourlyUpvotesTodayResult[$issue_entry_id_today] = array($hour => $hourlyUpvotesTodayRow);

您必须将 for 语句完全放在上面的 foreach 语句中。 然后您可以根据需要按期号打印每一份。

不确定 PHPExcel,但您可以通过执行基本相同的 foreach { for {} } 组循环来发布此内容,只是这次没有 SQL 调用,因为它已经在数组中了。

在 for() 循环之外,您可以添加如下内容:

print "ID number for this issue: " . $issue_entry_id_today . "<br>";

在那个循环中你会有:

print "Hour " . $hour . " produced " . $hourlyUpvotesTodayResult[$issue_entry_id_today][$hour] . " votes.";

您可以将其放入表格或 div 或任何您想要的东西中。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.