![](/img/trans.png)
[英]How to use foreach loop MYSQL month at to add month to +1 month in PHP?
[英]PHP: foreach loop by id and month and add values
我一直在努力解决我目前遇到的这个问题。 我们有一个id
, productid
, userid
, count
和downloaddate
。 类似于下面的东西来理解结构和结果的样子。
+----+-----------+--------+-------+---------------+
| 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 |
+------------+-------+---------------+
是否有可能做到这一点? 我试过,但它返回的总count
为productid
$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.