繁体   English   中英

PHP:按id和month进行foreach循环并添加值

[英]PHP: foreach loop by id and month and add values

我一直在努力解决我目前遇到的这个问题。 我们有一个idproductiduseridcountdownloaddate 类似于下面的东西来理解结构和结果的样子。

+----+-----------+--------+-------+---------------+
| id | productid | userid | count | downloaddate  |  
+----+-----------+--------+-------+---------------+
|  1 |         9 |    231 |     2 | October 2017   |  
|  2 |         8 |    230 |     1 | October 2017  |  
|  3 |         9 |    287 |     1 | October 2017  |  
|  4 |         9 |    200 |     2 | November 2017 |  
+----+-----------+--------+-------+---------------+

所以我想循环是让所有的productid ,并返回总数count为被记录在给定月份downloaddate列。

要归还:

+------------+-------+---------------+
| productid  | count | downloaddate  |  
+------------+-------+---------------+
|          9 |     3 | October 2017   |  
|          8 |     1 | October 2017  |  
|          9 |     2 | November 2017 |  
+------------+-------+---------------+

是否有可能做到这一点? 我试过,但它返回的总countproductid

$sum = array();
$emparray = array();

foreach ($downloads as $download){ 
   $emparray[] = $download;
}


foreach ($emparray as $downloaded){ 
   if (!isset($sum[$downloaded->id])) { 
      $sum[$downloaded->id]['count'] = $downloaded->count;
      $sum[$downloaded->id]['downloaddate'] = $downloaded->downloaddate;
    } else { 
      $sum[$downloaded->id]['count'] += $downloaded->count;
      $sum[$downloaded->id]['downloaddate'] = $downloaded->downloaddate;
     } 
 }

任何帮助将不胜感激!

编辑

这是我的SQL查询:

$downloads = $wpdb->get_results( 
             "
                SELECT ast.*, dl.userid, dl.count, dl.downloaddate 
                FROM $lead_table as ast
                JOIN $table_downloads as dl ON (dl.productid = ast.id)
              "
            );

我认为你应该将你的sql Query编辑成:

SELECT productid, sum(count) as count, downloaddate FROM your_table GROUP BY downloaddate

您可以通过productid和downloaddate进行一次查询分组得到结果(我希望10月October2017是问题中的拼写错误)

SELECT productid, sum(count) as count, downloaddate 
   FROM your_table
   GROUP BY productid, downloaddate

更新。 你的查询似乎是

SELECT ast.*, dl.userid, sum(dl.count) as count, dl.downloaddate 
    FROM $lead_table as ast
    JOIN $table_downloads as dl 
      ON (dl.productid = ast.id)
    GROUP BY dl.userid, dl.downloaddate

你必须能够告诉downloaddate中给出了哪个月(你可以建立一个时间戳吗?或者其他告诉你“October2017”与“2017年10月”相同的东西。

一旦你得到了,你“只需”将你的“总和”存储在2D数组中,类似于:

$sum = array();
foreach ($downloads as $download) {
    // dateToTimeStamp: custom function who gives you the same number for October2017 or October 2017
    $timestamp = dateToTimeStamp($downloaded->downloaddate);
    if (!isset($sum[$timestamp])) {
        $sum[$timestamp] = [];
    }

    if (!isset($sum[$timestamp][$downloaded->id])) { 
        $sum[$timestamp][$downloaded->id]['count']        = $downloaded->count;
        $sum[$timestamp][$downloaded->id]['downloaddate'] = $downloaded->downloaddate;

        continue 1;
    }

    $sum[$timestamp][$downloaded->id]['count']       += $downloaded->count;
    $sum[$timestamp][$downloaded->id]['downloaddate'] = $downloaded->downloaddate; 
}

您可以轻松地使用此查询并从php中提取数据并在那里使用它

 select productid,sum(count),downloaddate from tablename group by productid,downloaddate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM