使用PHP正确存储查询响应和组

使用PHP正确存储查询响应和组,php,sql,arrays,foreach,group-by,Php,Sql,Arrays,Foreach,Group By,我有一个很大的数据库,存储了很多关于客户和账单的信息。我想做的是,使用客户的id,搜索他们所有的账单,将每个账单中包含的价格相加,然后存储它们以打印一个唯一的账单 所以我想: 试一试{ $conn=newpdo'mysql:host=myhost;dbname=accounting'、'user'、'pass'; $conn->setAttributePDO::ATTR_ERRMODE,PDO::ERRMODE_异常; $conn->setAttributePDO::ATTR\u EMULATE

我有一个很大的数据库,存储了很多关于客户和账单的信息。我想做的是,使用客户的id,搜索他们所有的账单,将每个账单中包含的价格相加,然后存储它们以打印一个唯一的账单

所以我想:

试一试{ $conn=newpdo'mysql:host=myhost;dbname=accounting'、'user'、'pass'; $conn->setAttributePDO::ATTR_ERRMODE,PDO::ERRMODE_异常; $conn->setAttributePDO::ATTR\u EMULATE\u PREPARES,false; }特例$e{ 回显错误:.$e->getMessage; } $stmt=$conn->prepare'SELECT GROUP\u CONCATDISTINCT source\u external\u subscriber\u id AS id 从cdr′; $stmt->execute; foreach$stmt作为$row{ $string=$row['id']; } $array=分解“,”,$string; 数组\u pop$数组; 数组\移位$数组; $destinationId=0; foreach$数组作为$id{ $stmt2=$conn->prepare'SELECT id,call\u type,source\u customer\u cost 来自cdr 其中source\u external\u subscriber\u id=:id 目的地账户id=:目的地id'; $stmt2->executearray'id'=>$id'destinationId'=>$destinationId; foreach$stmt2作为$row2{ $datos[]=$row2; } } 我没有被结果说服,所以我决定亲自检查,首先执行代码,然后寻找客户将账单数量与数组长度进行比较,因此还没有总和 然后,当我在寻找一种更具说服力的方法时,我偶然发现了这个非常有用的方法。所以我把代码改成了这个。但在这里,它们只解释如何编写查询,而不是如何将其存储在数组中

试一试{ $conn=newpdo'mysql:host=host;dbname=accounting'、'user'、'pass'; $conn->setAttributePDO::ATTR_ERRMODE,PDO::ERRMODE_异常; $conn->setAttributePDO::ATTR\u EMULATE\u PREPARES,false; var_dump$conn; }特例$e{ 回显错误:.$e->getMessage; } $destinationId=0; $stmt2=$conn->prepare'SELECT source\u external\u subscriber\u id,source\u customer\u cost FROM cdr其中destination\u account\u id=:destinationId GROUP BY source\u external\u subscriber\u id'; $stmt2->executarray'destinationId'=>$destinationId; foreach$stmt作为$row{ $datos[]=$row2; } 现在我想知道存储数据的正确方法,所以它看起来像这样:

SELECT source_external_subscriber_id id, (SELECT SUM(source_customer_cost)) total FROM cdr GROUP BY source_external_subscriber_id;
数组=[ 0=>数组 id=>source\u external\u subscriber\u id1, 总计=>SUMsource\u客户成本 , 1=>数组 id=>source\u external\u subscriber\u id2, 总计=>SUMsource\u客户成本 ... ];
谢谢大家的帮助,我希望你有一个伟大的一天

如果我没弄错的话,你在寻找这样的东西:

SELECT source_external_subscriber_id id, (SELECT SUM(source_customer_cost)) total FROM cdr GROUP BY source_external_subscriber_id;

因此,这个问题的答案非常复杂:查询返回的数组有重复的行,可能是因为我最近开始使用它们,所以每个语句的对应都错了。总之,以下是查询和我的存储解决方案:

$destinationId=0; $stmt2=$conn->准备“从cdr中选择源\外部\订户\ id,SUMsource \客户\成本,其中目标\账户\ id=:按源\外部\订户\ id指定的目标id组”; $stmt2->executarray'destinationId'=>$destinationId; foreach$stmt2作为$row2{ $data[]=$row2; } 对于$i=0$i$data[$i][0], 1=>$data[$i][1] ; }
是 啊我一直在寻找一种正确的方法,但我现在也想知道如何在一个数组中保存响应,就像我在将信息上传到api时为了方便访问而发布的那样。比如:ID1-该id的总金额| ID2-该id的总金额,等等。如果我执行您的查询并存储使用for-each第二个代码面板获得的数据,它会匹配第三个代码面板上的数组吗?很抱歉,我没有从我家访问服务器的权限,所以我无法尝试。谢谢你的帮助!