Php 如何让mySQL返回多个分组的数据;“分层”;

Php 如何让mySQL返回多个分组的数据;“分层”;,php,mysql,arrays,performance,multidimensional-array,Php,Mysql,Arrays,Performance,Multidimensional Array,有没有办法查询mysql数据库并让它返回如下分组的结果: - 12/16/2010 -daily - Ad Source 1, uniques, hits, rev - Ad Source 2, uniques, hits, rev - Ad Source 3, uniques, hits, rev - Ad Source 4, uniques, hits, rev -total - total uniques, total hits, total

有没有办法查询mysql数据库并让它返回如下分组的结果:

- 12/16/2010
  -daily
    - Ad Source 1, uniques, hits, rev
    - Ad Source 2, uniques, hits, rev
    - Ad Source 3, uniques, hits, rev
    - Ad Source 4, uniques, hits, rev
  -total
    - total uniques, total hits, total rev

- 12/15/2010
  -daily
    - Ad Source 1, uniques, hits, rev
    - Ad Source 2, uniques, hits, rev
    - Ad Source 3, uniques, hits, rev
    - Ad Source 4, uniques, hits, rev
  -total
    - total uniques, total hits, total rev
现在,如果我想每天为一个站点获得收入,我会从mySQL获得如下结果:

  • 2010年12月16日,广告源1,uniques,hits,rev
  • 2010年12月16日,广告源2,uniques,hits,rev
  • 2010年12月16日,广告源3,uniques,hits,rev
  • 2010年12月16日,广告源4,uniques,hits,rev
  • 2010年12月15日,广告源1,uniques,hits,rev
  • 2010年12月15日,广告源2,uniques,hits,rev
  • 2010年12月15日,广告源3,uniques,hits,rev
  • 2010年12月15日,广告源4,uniques,hits,rev
然后,我需要运行第二个查询,以获得2010年12月16日和2010年12月15日的总金额,除此之外,我需要让PHP按天对其进行分组

我要查询的表的设置如下: 广告来源数量、日期、唯一性、点击率、版本


我觉得必须有一种更有效的方法来获取返回的数据。有人能帮忙吗:-(

“更有效的方法”--现在您已经遵循了有效的方法。2个查询通常不比1差。现在,当它完全正确时,您就有了这样的情况。

首先,查询以获得分组的每日数字:

SELECT id, ad_source_num, date, SUM(uniques) AS uniques, SUM(hits) AS hits, SUM(rev) AS rev FROM advertdata
GROUP BY date, ad_source_num ORDER BY date DESC, ad_source_num ASC
然后进行第二次查询(几乎相同)以获取总计:

SELECT id, ad_source_num, date, SUM(uniques) AS uniques, SUM(hits) AS hits, SUM(rev) AS rev FROM advertdata
GROUP BY date ORDER BY date DESC, ad_source_num ASC

我认为您正在寻找的是与您的小组成员一起提交的WITHROLLUP声明

SELECT date, ad_source, SUM(uniques) AS u, SUM(hits) AS h, SUM(rev) AS r FROM tablename GROUP BY date, ad_source WITH ROLLUP

这将在日期字段更改时为您提供一个额外的“总计”行。

等等。停下来。教这个人钓鱼,而不是把鱼给别人

设计理念如何?方法学如何?总是有这样的问题需要解决

试着写一个模型来描述你想要的数据。它在很多情况下都很有用。有时候你的数据可能来自两个不同的来源,然后SQL就不在了

 public function get_crap($start_date, $end_date)
    {
    $return = array();
    foreach (valid_date_range($start_date, $end_date) as $date)
         {
         $return[$date] = daily_crap_from($date, $this->db);
         }
     return $return;
    } 

 static function daily_crap_from($mm_dd_yyyy, $db) 
   {
   $return = array();
   $db->query("select * from daily_crap_lines where day like '".$mm_dd_yyyy."'")
   while ($c = $db->next_record())
      {
      $return[] = $c;
      }
    return $return;
   }

是的,但是当涉及到将所有数据分组以显示给用户时,我需要使用PHP将数据移动到多维数组中。是否有一种方法可以让mySQL将其返回给我,就像我在第一个示例中所做的那样?@Brendan:当然没有。数据库用于存储和处理信息。您将如何显示它-数据base不应该关心。事实上,我不知道为什么你需要多维数组,因为你需要的输出可以从平面数组中检索,只是从mysql中获取。在我所处的情况下,多维数组是首选的。如果我使用平面数组,我需要担心组织哪些数据来自哪个广告源,哪些数据来自哪个广告源day。如果有一种方法可以按日期分组,并将每个日期的结果按ad_源分组。@Brendan:没有办法。Mysql对php中的这种数据结构(多维数组)一无所知。这就是我目前正在做的,但是返回的数据没有组织,日期没有分组在一起(除排序外)你能发布你当前使用的查询吗?如果它们与我的相同,你已经将日期分组,你的问题变成“在PHP中,如何将我从MySQL得到的结果以这种方式格式化为多维数组?”